在訪問者模式(visitor pattern)中,我們使用了乙個訪問者類,它改變了元素類的執行演算法。通過這種方式,元素的執行演算法可以隨著訪問者改變而改變。這種型別的設計模式屬於行為型模式。根據模式,元素物件已接受訪問者物件,這樣訪問者物件就可以處理元素物件上的操作。
1、符合單一職責原則。
2、優秀的擴充套件性。
3、靈活性。
1、具體元素對訪問者公布細節,違反了迪公尺特原則。
2、具體元素變更比較困難。
3、違反了依賴倒置原則,依賴了具體類,沒有依賴抽象。
1.visitor 抽象訪問者角色,為該物件結構中具體元素角色宣告乙個訪問操作介面。該操作介面的名字和引數標識了傳送訪問請求給具體訪問者的具體元素角色,這樣訪問者就可以通過該元素角色的特定介面直接訪問它。
2.concretevisitor.具體訪問者角色,實現visitor宣告的介面。
3.element 定義乙個接受訪問操作(accept()),它以乙個訪問者(visitor)作為引數。
4.concreteelement 具體元素,實現了抽象元素(element)所定義的接受操作介面。
5.objectstructure 結構物件角色,這是使用訪問者模式必備的角色。它具備以下特性:能列舉它的元素;可以提供乙個高層介面以允許訪問者訪問它的元素;如有需要,可以設計成乙個復合物件或者乙個聚集(如乙個列表或無序集合)。
1、物件結構中物件對應的類很少改變,但經常需要在此物件結構上定義新的操作。
2、需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,而需要避免讓這些操作"汙染"這些物件的類,也不希望在增加新操作時修改這些類。
設計模式
-訪問者模式
-抽象訪問者
* */
public abstract class visitor
/*** created by laizhiyuan on 2017/8/1.**
*
設計模式
-訪問者模式
-具體訪問者a*
*/public class concretevisitora extends visitor
/*** 訪問元素
b時,做出的反應
* @param
concreteelementb
*/@override
public void
visitconcreteelementb(concreteelementb concreteelementb)
}
/*** created by laizhiyuan on 2017/8/1.**
*
設計模式
-訪問者模式
-具體訪問者b*
*/public class concretevisitorb extends visitor
/*** 訪問元素
b時,做出的反應
* @param
concreteelementb
*/@override
public void
visitconcreteelementb(concreteelementb concreteelementb)
}
/*** created by laizhiyuan on 2017/8/1.**
* *
設計模式
-訪問者模式
-抽象元素
* */
public abstract class element
/*** created by laizhiyuan on 2017/8/1.**
* *
設計模式
-訪問者模式
-具體元素a*
*/public class concreteelementa extends element
}
/*** created by laizhiyuan on 2017/8/1.**
* *
設計模式
-訪問者模式
-具體元素b*
*/public class concreteelementb extends element
}
/*** created by laizhiyuan on 2017/8/1.**
*
設計模式
-訪問者模式
-訪問者訪問元素高層介面
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...
設計模式 訪問者模式
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...
設計模式 訪問者模式
訪問者模式,封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。是一種分離物件資料結構與行為的方法,通過這種分離,可為乙個被訪問者動態新增新的操作而無需對資料結構本身進行修改。示例 訪問目標 public inte ce isubject 具體的訪...