接 3.5 訪問者模式(5.11)
訪問者模式的核心是解決a.foo(b)的雙分派問題。所以還是給出乙個簡單的例子。好人打賤人。好人有南拳、北腿類,賤人有鬼子、棒子、b2等。
訪問者模式中客戶test會建立各種各樣的物件,只呼叫乙個方法 」好人"的打(賤人 j)方法。
*/public abstract class 好人
abstract class 賤人
按照採用的技術不同,好人中可以使用過載(程式中就需要用instanceof)、可以使用不同方法名(本例採用的方式)——這些方法由賤人們呼叫,test不需要知道,所以採用預設訪問控制。
關鍵點:不同於gof,visitor為客戶提供了乙個統一的訪問介面 打(賤人 j)
賤人之所以賤,在gof中它的方法名不是command而是accept。這個方法的目的是將過載的打(賤人 j)方法區分開來,轉換成 x.打jp()等。
import static tool.print.*;
public class 南拳 extends 好人
@override void 打jp()
@override void 打bar()
@override void 打b2()
}class jp extends 賤人
}//其他的北腿、棒子、b2 略
測試:
public static void test訪問者()
輸出:
南拳.打jp()
南拳.打bar()
南拳.打b2()
北腿.打jp()
北腿.打bar()
北腿.打b2()
現在,好人中增加刀客類,按照南拳的樣子寫乙個。測試**建立乙個刀客物件m3,m3.打(a);m3.打(b);m3.打(c);
輸出:南拳.打jp()....
北腿.打b2()
刀客.打jp()
刀客.打bar()
刀客.打b2()
與抽象工廠類似,增加乙個好人的子類很方便;增加乙個賤人的子類,好人的類層次都需要修改。
如果願意,也可以用乙個arraylist把賤人物件放進去,把賤人叫作element,jp是具體的元素...
這就是訪問者模式的基本結構。
訪問者模式
訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...
訪問者模式
行為模式中的訪問者模式 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作,一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。動機 類層次結構中可能經常由於引入新的操作,從而將型別變得脆弱。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增...
訪問者模式
1.說明 namespace visitorspattern 象棋類 public abstract class chess public class redchess chess public class blackchess chess 在贏的情況下的狀態 public class win ac...