訪問者模式 Visitor

2021-08-20 14:08:55 字數 2909 閱讀 1357

訪問者模式,表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。這種型別的設計模式屬於行為型模式。根據模式,元素物件已接受訪問者物件,這樣訪問者物件就可以處理元素物件上的操作。

今天我們來講最後乙個設計模式,訪問者模式。大鳥說,把你剛才念的那段話用控制台應用程式寫下來,我們來看看這個模式是怎麼用的。

//人類

abstract class person

//男人類

class man : person

}

//女人類

class woman : person

}

//狀態抽象類

abstract class action

//成功類

class success : action

時, 背後多半有乙個偉大的女人。",

concreteelementa.gettype().name, this.gettype().name);

}public override void getwomanconclusion(woman concreteelementb)

時, 背後大多有乙個不成功的男人。",

concreteelementb.gettype().name, this.gettype().name);}}

//失敗

class failing : action

時, 悶頭喝酒,誰也不用勸。",

concreteelementa.gettype().name, this.gettype().name);

}public override void getwomanconclusion(woman concreteelementb)

時, 眼淚汪汪,誰也勸不動。",

concreteelementb.gettype().name, this.gettype().name);}}

//戀愛

class amativeness : action

時, 凡事不懂也要裝懂。",

concreteelementa.gettype().name, this.gettype().name);

}public override void getwomanconclusion(woman concreteelementb)

時, 遇事懂也裝作不懂。",

concreteelementb.gettype().name, this.gettype().name);}}

//結婚狀態類

class marriage : action

時, 感嘆道: 戀愛遊戲終結時, '有妻徒刑' 遙無期。",

concreteelementa.gettype().name,this.gettype().name);

}public override void getwomanconclusion(woman concreteelementb)

時, 感嘆道: 戀愛遊戲終結時, '有妻徒刑' 遙無期。",

concreteelementb.gettype().name, this.gettype().name);}}

//物件結構

class objectstructure

//移除

public void detach(person element)

//檢視顯示

public void display(action vistor)}}

//客戶端

關係介紹

訪問者類(visitor)是具體訪問者類(concretevistor)的父類。訪問者類和客戶端是關聯關係。元素類(element)是具體元素類的父類(concreteelement)。物件結構(objectstructure)和元素類,客戶端之間又都是關聯關係。

visitor(訪問者類):為該物件結構中具體元素類的每乙個類宣告乙個visit操作。

concretevistor(具體訪問者類):實現每個由visitor宣告的操作。每個操作實現演算法的一部分而該演算法片斷乃是對應於結構中的物件的類。

element(元素類):定義了乙個accept操作,它以乙個訪問者為引數。

concreteelement(具體元素類):具體元素,實現accept操作

objectstructure(物件結構):能列舉它的元素,可以提供乙個高層的介面以允許訪問者訪問它的元素。

優:1、符合單一職責原則。 

2、優秀的擴充套件性。 

3、靈活性。

缺:1、具體元素對訪問者公布細節,違反了迪公尺特原則。 

2、具體元素變更比較困難。 

3、違反了依賴倒置原則,依賴了具體類,沒有依賴抽象。

1、物件結構中物件對應的類很少改變,但經常需要在此物件結構上定義新的操作。 

2、需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,而需要避免讓這些操作"汙染"這些物件的類,也不希望在增加新操作時修改這些類。

Visitor(訪問者模式)

名 稱 visitor 訪問者模式 意 圖 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。適 用 環 境 u 乙個物件結構包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作。u 需要對乙個物件結構中的物件進行很多...

訪問者模式(Visitor)

訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。他使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。訪問者模式適用於資料結構相對穩定的系統。他把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由地演化。訪問者模式的目的是要把處理從資料結構分離出來...

訪問者模式 Visitor

訪問者模式 visitor 首先看一下男人與女人不同狀態下反應的實現 結構圖 狀態的抽象類和人的抽象類 abstract class action abstract class person 在這裡關鍵在於人只分為男人與女人,分類穩定 具體狀態類 成功 class success action 時,...