訪問者模式,表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。訪問者模式適用於資料結構相對穩定的系統。它把資料結構和作用於結構上的操作之間耦合解脫開,使得操作幾何可以相對自由地演化。訪問者模式的目的使要把處理從資料結構中分離出來。很多系統可以按照演算法和資料結構分開,如果這樣的系統有比較穩定的資料結構,又有易於變化的演算法的話,使用訪問者模式就是比較合適的。
其uml圖如下:
每個concretevisitor都有自己的資料處理方式,但是它們處理的資料則是不變的。在objectstucture中有element的列表,並提供了訪問資料的介面。
示例**如下:
// visitormodel.h檔案
#pragma once
#include
#include
#include
#include
class
visitor
;// 被訪問元素
class
element
std::string getname()
virtual
void
accept
(visitor * visitor)=0
;};class
concreteelementa
:public element
void
accept
(visitor * visitor);}
;class
concreteelementb
:public element
void
accept
(visitor * visitor);}
;// 訪問者
class
visitor
;class
concretevisitora
:public visitor
void
visitconcreteelementb
(concreteelementb * p)};
class
concretevisitorb
:public visitor
void
visitconcreteelementb
(concreteelementb * p)};
void concreteelementa::
accept
(visitor * visitor)
void concreteelementb::
accept
(visitor * visitor)
// 聚集類
class
objectstructure
m_vec.
clear()
;}void
add(element * p)
void
accept
(visitor * visitor)}}
;
測試**如下:
#include
#include
"visitormodel.h"
intmain()
測試結果如下圖:
訪問者模式的優點就是增加新的操作很容易,因為增加新的操作就意味著增加乙個新的訪問者。訪問者模式將有關的行為集中到乙個訪問者物件中。
設計模式之訪問者模式
先看一下下面這段 class person public string getaction public void setaction string action public void getconclusion else if action exciting else if action gri...
設計模式之訪問者模式
我們去銀行櫃檯辦業務,一般情況下會開幾個個人業務櫃檯的,你去其中任何乙個櫃檯辦理都是可以的。我們的訪問者模式可以很好付諸在這個場景中 對於銀行櫃檯來說,他們是不用變化的,就是說今天和明天提供個人業務的櫃檯是不需要有變化的。而我們作為訪問者,今天來銀行可能是取消費流水,明天來銀行可能是去辦理手機銀行業...
設計模式之訪問者模式
定義 表示一介作用於某個物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。結構圖 示例 public inte ce vistor public class concretevisitor1 implements vistor override public ...