Visitor (C++实现)
来源:互联网 发布:win10登录界面域名 编辑:程序博客网 时间:2024/06/06 14:07
// Visitor.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Visitor;
class Element
{
public:
virtual ~Element(){}
virtual void Accept(Visitor &rVisitor) = 0;
protected:
Element(){}
};
class ConcreateElementA
: public Element
{
public:
ConcreateElementA(string s):state_A(s)
{
}
virtual ~ConcreateElementA() {}
virtual void Accept(Visitor &rVisitor);
string getState()
{
return state_A;
}
private:
string state_A;
};
class ConcreateElementB
: public Element
{
public:
ConcreateElementB(string s): state_B(s)
{
}
virtual void Accept(Visitor &rVisitor);
string getState()
{
return state_B;
}
private:
string state_B;
};
class Visitor
{
public:
virtual ~Visitor(){}
virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA) = 0;
virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB) = 0;
protected:
Visitor(){}
};
class ConcreateVisitorA
: public Visitor
{
public:
virtual ~ConcreateVisitorA(){}
virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA)
{
cout<<"+++++"<<pConcreateElementA->getState()<<"+++++"<<endl;
}
virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB)
{
cout<<"-----"<<pConcreateElementB->getState()<<"-----"<<endl;
}
};
class ConcreateVisitorB
: public Visitor
{
public:
virtual ~ConcreateVisitorB(){}
virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA)
{
cout<<"@@@@@"<<pConcreateElementA->getState()+""<<"@@@@@"<<endl;
}
virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB)
{
cout<<"#####"<<pConcreateElementB->getState()<<"#####"<<endl;
}
};
void ConcreateElementA::Accept(Visitor &rVisitor)
{
rVisitor.VisitConcreateElementA(this);
}
void ConcreateElementB::Accept(Visitor &rVisitor)
{
rVisitor.VisitConcreateElementB(this);
}
int _tmain(int argc, _TCHAR* argv[])
{
Visitor *pVisitorA = new ConcreateVisitorA();
Visitor *pVisitorB= new ConcreateVisitorB();
Element *pElement = new ConcreateElementA(string("XXXXX"));
pElement->Accept(*pVisitorA);
pElement->Accept(*pVisitorB);
Element *pElement2 = new ConcreateElementB(string("YYYYY"));
pElement2->Accept(*pVisitorA);
pElement2->Accept(*pVisitorB);
delete pElement;
delete pElement2;
delete pVisitorA;
delete pVisitorB;
return 0;
}
- Visitor (C++实现)
- Design Pattern - Visitor(C#)
- Visitor(访问者) java实现
- 设计模式(c++)笔记之二十(Visitor模式)
- Visitor Pattern -- 基于编译试验抽象语法树 (C++)
- (C++实现)——访问者模式(Visitor Pattern)
- 设计模式实现(二十四)---访问者模式(Visitor)
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 程序基础设计模式的解析和实现(C++)之二十-Visitor模式
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 设计模式的解析和实现(C++)之二十-Visitor模式
- 用Reflection实现Visitor模式
- 用C#实现Visitor模式
- 用Reflection实现Visitor模式
- C++实现Behavioral - Visitor模式
- C++实现Behavioral - Visitor模式
- Java 实现访问者(Visitor)模式
- Archlinux Eclipse 崩溃问题解决
- Android中WAP PUSH的实现分析
- 用户并发数计算
- 单链表的基本操作实现
- 块编程指南
- Visitor (C++实现)
- Win32应用程序中进程间通信方法分析与比较
- 正则表达式
- VuGen中的web动作函数
- WEB性能测试用例设计
- Android核心分析(23)-----Andoird GDI之基本原理及其总体框架
- Visual Studio 2008 每日小窍门 【持续发布ing~】 Tips:022
- nafxcw.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined
- [Serializable]标识