前文回顧
單例模式(一)
單例模式(二)
觀察者模式
簡單工廠模式
工廠方法模式(一)
工廠方法模式(二)
抽象工廠模式(一)
抽象工廠模式(二)
原型模式
外觀模式
中介者模式
**模式
裝飾者模式
策略模式
狀態模式
命令模式
建造者模式
橋接模式
直譯器模式
訪問者模式的本質就是想給一系列物件新增新的方法,但是又不想在原來類**中進行增加,即保持既有的類不變,把要新增的方法再新的類中進行實現。
所謂訪問者就是一系列行為的統稱,通過多型實現多種行為的新增,通過函式過載實現針對不同物件的特定行為的呼叫。
場景描述
假設動物園中只有狗和貓兩種動物,開始所有動物只有乙個名稱屬性,但預留了訪問者介面,後續可以給動物增加新的行為而不用修改既有的類。
動物基類
#include
using
namespace std;
class
visitor
;class
animal
string getname()
const
virtual
~animal()
virtual
void
accept
(visitor *m_visitor)=0
;protected
: string name;
};
動物派生類
①.dog 類
#include
"animal.h"
class
dog:
public animal
;#include
"dog.h"
#include
"visitor.h"
void dog::
accept
(visitor *m_visitor)
②.cat 類
#include
"animal.h"
class
cat:
public animal
;#include
"cat.h"
#include
"visitor.h"
void cat::
accept
(visitor *m_visitor)
訪問者基類
#include
class
dog;
class
cat;
class
visitor
;virtual
~visitor()
virtual
void
visit
(dog * animal)=0
;virtual
void
visit
(cat * animal)=0;};
訪問者派生類
①.叫 訪問者
#include
"visitor.h"
class
speakvisitor
:public visitor
void
visit
(cat *animal) override;
void
visit
(dog *animal) override;};
#include
"speakvisitor.h"
#include
"cat.h"
#include
"dog.h"
void speakvisitor::
visit
(cat *animal)
void speakvisitor::
visit
(dog *animal)
②.跑 訪問者
#include
"visitor.h"
class
runvisitor
:public visitor
void
visit
(dog *animal) override;
void
visit
(cat *animal) override;};
#include
"runvisitor.h"
#include
"dog.h"
#include
"cat.h"
void runvisitor::
visit
(dog *animal)
void runvisitor::
visit
(cat *animal)
動物園類
#include
"animal.h"
#include
"visitor.h"
#include
#include
using
namespace std;
class
zoo;
void
addanimal
(shared_ptr animal)
void
removeanimal
(shared_ptr animal)
void
accept
(visitor * visitor)
}private
: list> animals;
};
客戶端呼叫
C 設計模式 訪問者模式
表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。1.visitor 抽象訪問者角色,為該物件結構中具體元素角色宣告乙個訪問操作介面。該操作介面的名字和引數標識了傳送訪問請求給具體訪問者的具體元素角色,這樣訪問者就可以通過該元素角色的特定介面直接...
C 設計模式 訪問者模式
1 訪問者模式定義 表示乙個作用於其物件結構中的各個元素的操作。訪問者模式是一種物件行為型模式,它為操作儲存不同的型別元素的物件結構提供了一種解決方案,使用者可以對不同型別的元素施加不同的操作。訪問者模式常常和組合模式一起使用。2 訪問者模式結構 該模式包含五種角色 1 抽象訪問者類 visitor...
C 設計模式 訪問者模式
一.介紹 訪問者模式 visitor pattern 屬於行為型模式。表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。二.實現 舉個例子,如果有元素a b類,想呼叫這些元素中的print方法,很簡單地,只要例項化去呼叫就可以。public a...