封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。
visitor:抽象訪問者(抽象類或介面,宣告訪問者可以訪問哪些元素,具體到程式中就是visit方法的引數定義哪些物件是可以被訪問的)
public inte***ce ivisitor
visitor:具體訪問者(影響訪問者訪問到乙個類後的處理)
public class visitor implements ivisitor
@override
public void visit(contrateelement2 el2)
}
element:抽象元素(介面或者抽象類,宣告接受哪一類訪問者訪問,通過accept方法中的引數來定義的)
public abstract class element
concreelement:具體元素(實現accept方法,通常是visitor.visit(this),基本上都形成了一種模式了)
public class contacteelement1 extends element
public void accept(ivisitor visitor)
}public class contrateelement2 extends element
public void accept(ivisitor visitor)
}
objectstruture:結構物件(元素產生者,一般容納在多個不同類、不同介面容器)
public class objectstruture else
}}
場景類:
public class client
}}
輸出結果:
contacteelement1 accept
visitor visit contacteelement1
contacteelement1 dosomething
contacteelement1 accept
visitor visit contacteelement1
contacteelement1 dosomething
contacteelement2 visitor
visitor visit contacteelement2
contacteelement2 dosomething
優點:符合單一職責原則;優秀的擴充套件性;靈活性高
缺點:具體元素對訪問者公布細節;具體元素變更比較困難;違背了依賴倒置原則
設計模式筆記 訪問者模式
訪問者模式 表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。visitor類,為該物件結構中concretevisitor的每乙個類宣告乙個visit操作。訪問者介面為使用不同演算法的子類宣告訪問操作。public abstract clas...
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...
設計模式 訪問者模式
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...