定義:封裝某些作用於某種資料結構中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。
抽象訪問者:抽象類或者介面,宣告訪問者可以訪問哪些元素,具體到程式中就是visit方法中的引數定義哪些物件是可以被訪問的。
訪問者:實現抽象訪問者所宣告的方法,它影響到訪問者訪問到乙個類後該幹什麼,要做什麼事情。
抽象元素類:介面或者抽象類,宣告接受哪一類訪問者訪問,程式上是通過accept方法中的引數來定義的。抽象元素一般有兩類方法,一部分是本身的業務邏輯,另外就是允許接收哪類訪問者來訪問。
元素類:實現抽象元素類所宣告的accept方法,通常都是visitor.visit(this),基本上已經形成一種定式了。
結構物件:乙個元素的容器,一般包含乙個容納多個不同類、不同介面的容器,如list、set、map等,在專案中一般很少抽象出這個角色。
abstract
class
element
inte***ce
ivisitor
class
concreteelement1
extends
element
//轉接方法
public
void accept(ivisitor visitor)
}class
concreteelement2
extends
element
public
void accept(ivisitor visitor)
}//做一層方法的轉接
class
visitor
implements
ivisitor
public
void visit(concreteelement2 el2)
}class
objectstruture else
}return list;
}}public
class
test }}
優點:
符合單一職責原則:element和visitor職責分明
優秀的擴充套件性:職責已經分開,增加新的職責方便
靈活性好:
缺點:具體元素對訪問者公布細節:visitor需要知道element的細節,違反迪公尺特法則
element元素變更困難。
違反依賴倒置原則:訪問者依賴具體元素,而不是介面
使用場景
乙個物件結構包含很多類物件,他們有不同的介面。現在想對這些物件實施一些依賴於其具體類的操作,也就是迭代器模式已不能勝任的情況
需要對乙個物件結構中的物件進行很多不同且不相關的操作,而又想避免讓這些操作汙染這些物件
訪問者模式是對迭代器模式的擴充套件。迭代器模式只能操作相同的類或介面,訪問者可以對不同的類和介面進行操作。在需要訪問多個不同物件的情況下比較適用。
訪問者模式還可以充當***的功能
訪問者模式
訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...
訪問者模式
行為模式中的訪問者模式 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作,一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。動機 類層次結構中可能經常由於引入新的操作,從而將型別變得脆弱。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增...
訪問者模式
1.說明 namespace visitorspattern 象棋類 public abstract class chess public class redchess chess public class blackchess chess 在贏的情況下的狀態 public class win ac...