一、定義
訪問者模式:表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用與這些元素的新操作。
解釋:乙個物件,如果它的元素是固定的,那麼可以使用訪問者模式定義它們的操作,使得操作可以自由的增加或者減少而不影響系統的其它部分。
二、uml類圖及基本**
基本**:
abstract客戶端呼叫及其允許結果:class
visitor
class
concretevisitor1 : visitor
被訪問", concreteelementa.gettype().name, this
.gettype().name);
}public
override
void
visitconcreteelementb(concreteelementb concreteelementb)
被訪問", concreteelementb.gettype().name, this
.gettype().name);}}
class
concretevisitor2: visitor
被訪問", concreteelementa.gettype().name, this
.gettype().name);
}public
override
void
visitconcreteelementb(concreteelementb concreteelementb)
被訪問", concreteelementb.gettype().name, this
.gettype().name);}}
abstract
class
element
class
concreteelementa : element
public
void
operationa()
}class
concreteelementb : element
public
void
operationb()
}class
objectstructure
public
void
detach(element element)
public
void
accept(visitor visitor)}}
三、例項說明
介紹男人和女人之間的區別。現在元素包括男人和女人是固定的,但是它們的區別即操作不多種多樣的,例如:男人成功時,背後多半有乙個偉大的女人,女人成功時,背後大多有乙個不成功的男人;男人失敗時,悶頭喝酒,誰也不用勸,女人失敗時,眼淚汪汪,誰也勸不了,等等。**說明:
首先編寫抽象人類和具體的物件男人、女人:
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
fail : 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 action)}}
四、優缺點及適用場景
優點:訪問者模式使得新增新的操作變得容易。如果一些操作依賴於乙個複雜的結構物件的話,那麼一般而言,新增新的操作會變得很複雜。而使用訪問者模式,增加新的操作就意味著新增乙個新的訪問者類。因此,使得新增新的操作變得容易。
缺點:增加新的元素類變得困難。每增加乙個新的元素意味著要在抽象訪問者角色中增加乙個新的抽象操作,並在每乙個具體訪問者類中新增相應的具體操作。
適用場景:
說白了,就是能顯示其優點迴避其缺點的地方都可以適用。
設計模式 21 訪問者模式(Visitor)
21 訪問者模式 visitor 訪問者模式把資料結構和作用於結構上的操作解耦合,使得對資料操作可相對自由地演化。訪問者模式適用於資料結構相對穩定,演算法又易變化的系統。因為訪問者模式使得演算法操作增加變得容易。若系統資料結構物件易於變化,經常有新的資料物件增加進來,則不適合使用訪問者模式。訪問者模...
21 訪問者模式(Visitor)
訪問者模式把資料結構和作用於結構上的操作解耦合,使得操作集合可相對自由地演化。訪問者模式適用於資料結構相對穩定演算法又易變化的系統。因為訪問者模式使得演算法操作增加變得容易。若系統資料結構物件易於變化,經常有新的資料物件增加進來,則不適合使用訪問者模式。訪問者模式的優點是增加操作很容易,因為增加操作...
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...