設計模式 訪問者模式(二十三)

2021-08-02 18:17:58 字數 1911 閱讀 3634

軟體領域中的設計模式的重要性不言而喻。設計模式中運用了物件導向程式設計語言的重要特性:封裝、繼承、多型。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶著疑問開始學習設計模式,主要參考《大話設計模式》和《設計模式:可復用物件導向軟體的基礎》兩本書。

訪問者模式(visitor):封裝某些作用於某種資料結構

中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。

訪問者模式的目的是要把處理從資料結構分離出來。有比較穩定的資料結構,又有易於變化的演算法

的話,使用訪問者模式就是比較合適的,因為訪問者模式使得演算法操作的增加變得容易。

優點:仿問者模式的優點就是增加新的操作很容易,因為增加新的操作就意味著增加乙個新的訪問者。訪問者模式將有關的行為集中到乙個訪問者物件中。

缺點:使增加新的資料結構變得困難了。

visitor ——抽象訪問者

抽象類或者介面,宣告訪問者可以訪問哪些元素,具體到程式匯中就是visit方法的引數定義哪些物件是可以被訪問的。

concretevisitor——具體訪問者

它影響訪問者訪問到乙個類後該怎麼幹,要做什麼事情。

element——抽象元素

介面或抽象類,宣告接受哪一類訪問者訪問,程式上是通過accept方法中的引數來定義的。

concreteelement——具體元素

實現accept方法,通常是visitor.visit(this),基本上都形成了一種模式了。

objectstruture——結構物件

元素生產者,一般容納在多個不同類、不同介面的容器。

訪問者模式其實主要就是讓介面element及其實現子類負責資料結構的定義,而關於這些資料的操作,則放在訪問者類中,每個訪問者子類可以負責實現一系列相關的涉及不同資料子結構(element子型別)的操作,而不同的訪問者子類可以定義完全不相關的操作。也就是說訪問者模式的主要作用是把資料結構和作用於結構上的操作解耦合,使得操作集合可以相對自由地演化。這樣訪問者模式的優點就是增加新的操作容易,因為增加新的操作就意味著增加乙個新的訪問者;而訪問者模式的缺點就是增加新的資料結構比較困難。綜上,如果系統有比較穩定的資料結構,又有已於變化的演算法的話,使用訪問者模式就比較合適。

//抽象行動(抽象觀察者)

class action;

//抽象人類

class persion;

//具體人1 (具體元素1)

class man :public persion

};//具體人2 (具體元素2)

class woman :public persion

};//具體訪問者1

class success :public action

virtual void getwomanconclusion(woman* concreteelementb) };

//具體訪問者2

class failure :public action

virtual void getwomanconclusion(woman* concreteelementb) };

//物件結構類

class objectstructure

void display(action* visitor) };

int main()

設計模式二十三(訪問者模式)

訪問者模式 visitor 表示乙個作用於物件結構中的各個元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作 類圖的 訪問者模式的 如下 public abstract class visitor public class concretevisitor1 extends v...

python設計模式(二十三) 訪問者模式

訪問者模式,資料結構中儲存著許多元素,當改變一種對元素的處理方式但時,我們避免重複的修改資料類的結構,那我們在設計之初就將資料的處理分離,即資料類只提供乙個資料處理的介面,而資料類的處理方法我們叫它訪問者,那麼相同結構的資料面臨不同的處理結果時,我們只需要建立不同的訪問者。我們假設一種場景 上市公司...

小話設計模式(二十三)訪問者模式

訪問者的適用情況 1 乙個物件結構包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作。2 需要對乙個物件結構中的物件進行很多不同的並且不想關的操作,而你想避免讓這些操作 汙染 這些物件的類。3 定義物件結構的類很少改變,但經常需要在此結構上定義新的操作。本文以遊戲中的倉庫...