訪問者模式(C 實現)

2021-09-26 05:20:39 字數 3943 閱讀 3472

(本部落格旨在個人總結回顧)

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

說明:

優點:

①符合單一職責原則。

②優秀的擴充套件性 、靈活性。

缺點:

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

②具體元素變更比較困難。

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

使用場景:

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

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

// stdafx.h : 標準系統包含檔案的包含檔案,

// 或是經常使用但不常更改的

// 特定於專案的包含檔案

//#pragma once

#include "targetver.h"

#include #include #include using namespace std;

// todo: 在此處引用程式需要的其他標頭檔案

visitor.h(訪問者介面類)

#pragma once

#include "element.h"

class element;

class visitor

;

visitor.cpp

#include "stdafx.h"

#include "visitor.h"

visitor::visitor()

visitor::~visitor()

visitor1.h(具體訪問者1)

#pragma once

#include "visitor.h"

class visitor1 :

public visitor

visitor1.cpp

#include "stdafx.h"

#include "visitor1.h"

visitor1::visitor1()

visitor1::~visitor1()

void visitor1::visitelementx(element* pelement)

void visitor1::visitelementy(element* pelement)

visitor2.h(具體訪問者2)

#pragma once

#include "visitor.h"

class visitor2 :

public visitor

;

visitor2.cpp

#include "stdafx.h"

#include "visitor2.h"

visitor2::visitor2()

visitor2::~visitor2()

void visitor2::visitelementx(element* pelement)

void visitor2::visitelementy(element* pelement)

element.h(元素介面類)

#pragma once

#include "visitor.h"

class visitor;

class element

;

element.cpp

#include "stdafx.h"

#include "element.h"

element::element()

element::~element()

elementx.h(具體元素x)

#pragma once

#include "element.h"

class elementx :

public element

;

elementx.cpp

#include "stdafx.h"

#include "elementx.h"

elementx::elementx()

elementx::~elementx()

void elementx::accept(visitor* pvisitor)

void elementx::operationx()

elementy.h(具體元素類y)

#pragma once

#include "element.h"

class elementy :

public element

;

elementy.cpp

#include "stdafx.h"

#include "elementy.h"

elementy::elementy()

elementy::~elementy()

void elementy::accept(visitor* pvisitor)

void elementy::operationy()

objectstructure.h(結構類)

#pragma once

#include#include "element.h"

#include "visitor.h"

class objectstructure

;

objectstructure.cpp

#include "stdafx.h"

#include "objectstructure.h"

objectstructure::objectstructure()

objectstructure::~objectstructure()

m_listelement.clear();

}void objectstructure::add(element* pelement)

}void objectstructure::remove(element* pelement)

}void objectstructure::accept(visitor* pvisitor)

}

呼叫**

visitorpatternmemo.cpp

// visitorpatternmemo.cpp : 定義控制台應用程式的入口點。

c 訪問者模式

寫個基類 ifndef employee hpp define employee hpp define cc synthesize vartype,varname,funname protected vartype varname public virtual vartype get funname...

C 訪問者模式

訪問者模式 訪問者模式 visitor 表示乙個作用於某個物件結構中各元素的操作,它使你可以再不改變各元素類的前提下定義作用於這些元素的新操作。結構圖 圖 using system using system.collections.generic using system.linq using sy...

訪問者模式

訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...