13、Visitor 訪問者模式 訪問資料結構並處理資料 行為型設計模式
阿新 • • 發佈:2020-08-06
1、模式的定義與特點
訪問者(Visitor)模式的定義:將作用於某種數據結構中的各元素的操作分離出來封裝成獨立的類,使其在不改變數據結構的前提下可以添加作用於這些元素的新的操作,為數據結構中的每個元素提供多種訪問方式。它將對數據的操作與數據結構進行分離,是行為類模式中最復雜的一種模式。
訪問者(Visitor)模式是一種對象行為型模式,
其主要優點如下
擴展性好。能夠在不修改對象結構中的元素的情況下,為對象結構中的元素添加新的功能。復用性好。可以通過訪問者來定義整個對象結構通用的功能,從而提高系統的復用程度。靈活性好。訪問者模式將數據結構與作用於結構上的操作解耦,使得操作集合可相對自由地演化而不影響系統的數據結構。符合單一職責原則。訪問者模式把相關的行為封裝在一起,構成一個訪問者,使每一個訪問者的功能都比較單一。
主要缺點如下
增加新的元素類很困難。在訪問者模式中,每增加一個新的元素類,都要在每一個具體訪問者類中增加相應的具體操作,這違背了“開閉原則”。破壞封裝。訪問者模式中具體元素對訪問者公布細節,這破壞了對象的封裝性。違反了依賴倒置原則。訪問者模式依賴了具體類,而沒有依賴抽象類。
2、示例代碼
定義Element接口
packagecn.design.behavior.visitor;
/**
*@authorlin
*@version1.0
*@date2020-07-2716:15
*@DescriptionTODO
*/
publicinterfaceElement{
voidaccept(Visitorvisitor);
}
定義Compute類
packagecn.design.behavior.visitor;
importcn.design.create.abstractfactory.clone.User;
/**
*@authorlin
*@version1.0
*@date2020-07-2716:33
*@DescriptionTODO
*/
publicclassComputeimplementsElement{
Useruser=newUser();