訪問者模式 好人打賤人

2021-06-26 01:26:50 字數 1436 閱讀 2757

接  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...