設計模式 訪問者模式

2021-09-12 06:12:55 字數 2153 閱讀 7558

訪問者模式(visitor),表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

訪問者模式,是行為型設計模式之一。訪問者模式是一種將資料操作與資料結構分離的設計模式,它可以算是 23 中設計模式中最複雜的乙個,但它的使用頻率並不是很高,大多數情況下,你並不需要使用訪問者模式,但是當你一旦需要使用它時,那你就是需要使用它了。

訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的、比較穩定的物件結構,這些物件的類都擁有乙個 accept 方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個 visit 方法,這個方法對訪問到的物件結構中不同型別的元素做出不同的處理。在物件結構的一次訪問過程中,我們遍歷整個物件結構,對每乙個元素都實施 accept 方法,在每乙個元素的 accept 方法中會呼叫訪問者的 visit 方法,從而使訪問者得以處理物件結構的每乙個元素,我們可以針對物件結構設計不同的訪問者類來完成不同的操作,達到區別對待的效果。

角色:

男人和女人的對比。

class program

}abstract class action//抽象動作類

abstract class person//抽象人類

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 man:person//男人類

}class woman : person//女人類

}class objectstructure//物件結構類

public void

detach

(person element)

public void

display

(action visitor)

}}

設計模式 訪問者模式

訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...

設計模式 訪問者模式

訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...

設計模式 訪問者模式

在訪問者模式 visitor pattern 中,我們使用了乙個訪問者類,它改變了元素類的執行演算法。通過這種方式,元素的執行演算法可以隨著訪問者改變而改變。這種型別的設計模式屬於行為型模式。根據模式,元素物件已接受訪問者物件,這樣訪問者物件就可以處理元素物件上的操作。1 符合單一職責原則。2 優秀...