封裝某些作用於某種資料結構中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。
先上一張圖:
抽象訪問者:抽象類或者介面,宣告訪問者可以訪問哪些元素
訪問者:實現抽象訪問者所宣告的方法,它影響到訪問者訪問到乙個類後該幹什麼,要做什麼事情。
抽象元素類:介面或者抽象類,宣告接受哪一類訪問者訪問。
元素類:實現抽象元素類所宣告的方法。
結構物件:乙個元素的容器,一般包含乙個容納多個不同類、不同介面的容器,如list、set、map等。
就模擬一下檔案訪問操作。
抽象訪問者
/**
* * 抽象訪問者類:申明可以訪問哪些元素
* */
public
inte***ce
visiter
訪問者/**
* 具體的訪問者
* */
public
class
visitera
implements
visiter
@override
public
void
visit
(docb docb)
}
抽象元素類/**
* * 抽象元素類:宣告 接受何種型別的訪問。
* */
public
abstract
class
doc
具體的元素類
這裡可以把readdoc方法交由visiter實現。
/**
* * 具體的元素類a(concreteelement)
* */
public
class
doca
extends
doc@override
public string readdoc()
}
/**
* 具體的元素類b(concreteelement)
* */
public
class
docb
extends
doc@override
public string readdoc()
}
結構物件/**
* *檔案袋:結構物件,容納元素
*/public
class
docbag
return docs;
}}
客戶端測試類public
看完**就發現了,訪問者模式主要將資料結構與資料操作分離。但是這樣不符合迪公尺特原則。
優點:
1、可擴充套件性比較好,靈活。元素類可以通過接受不同的訪問者來實現對不同操作的擴充套件。
2、符合單一職責原則。
缺點:
1、具體元素對訪問者公布細節,違反了迪公尺特原則。
2、因為訪問者對應著具體元素的操作,所以新增元素的話需要修改很多地方。
訪問者模式
訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...
訪問者模式
行為模式中的訪問者模式 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作,一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。動機 類層次結構中可能經常由於引入新的操作,從而將型別變得脆弱。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增...
訪問者模式
1.說明 namespace visitorspattern 象棋類 public abstract class chess public class redchess chess public class blackchess chess 在贏的情況下的狀態 public class win ac...