程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Vistor訪問者模式(C++訪問者模式)

Vistor訪問者模式(C++訪問者模式)

編輯:C++入門知識

Vistor訪問者模式(C++訪問者模式)


Visitor模式在不破壞類的前提下,為類提供增加新的新操作。

Visitor模式經常用於將更新的設計封裝在一個類中,並且由待更改的類提供一個接受接口,其關鍵技術在於雙分派技術,Element類提供接口,通過Accept實現具體使用哪一個具體的Visit操作;

當然如果有很多的修改,便可以提供更多的Element的Visitor,但是會破壞系統的封裝,並且難於擴展。 C++設計模式原書中的代碼:
#include 
using namespace std;
class Element;

class Visitor
{
public:
	virtual ~Visitor(){}
	virtual void visitConElemA(Element* elm)=0;
	virtual void visitConElemB(Element* elm)=0;
protected:
	Visitor(){}
};


class ConcreteVisitorA:public Visitor
{
public:
	ConcreteVisitorA(){};
	virtual ~ConcreteVisitorA(){};
	void visitConElemA(Element* elm){cout<<"visit A";}
	void visitConElemB(Element* elm){cout<<"visit B";}
};


class ConcreteVisitorB:public Visitor
{
public:
	ConcreteVisitorB(){};
	virtual ~ConcreteVisitorB(){};
	void visitConElemA(Element* elm){cout<<"visit A";}
	void visitConElemB(Element* elm){cout<<"visit B";}
};


class Element
{
public:
	virtual ~Element(){};
	virtual void Accept(Visitor* vis)=0;
protected:
	Element(){};
};


class ConcreteElementA:public Element
{
public:
	ConcreteElementA(){}
	~ConcreteElementA(){}
	void Accept(Visitor* vis)
	{
		cout<<"This is A interface "<visitConElemA(this);
	}
};


class ConcreteElementB:public Element
{
public:
	ConcreteElementB(){}
	~ConcreteElementB(){}
	void Accept(Visitor* vis)
	{
		cout<<"This is B interface ";
		vis->visitConElemB(this);  
	}
};


void main()
{
	Visitor* vis=new ConcreteVisitorA();
	Element* elm=new ConcreteElementA();
	elm->Accept(vis);

	delete elm;
	delete vis;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved