Visitor
2024-08-27 12:56:46
#include <iostream>
#include <vector> using namespace std; #define DESTROY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; } class Element; class Visitor
{
public:
virtual void Visit(Element* pElement)=;
}; class ConcreteVisitorA : public Visitor
{
public:
void Visit(Element* pElement);
}; class ConcreteVisitorB : public Visitor
{
public:
void Visit(Element* pElement);
}; class Element
{
public:
virtual void Accept(Visitor* pVisitor)=;
virtual void Interface1()=;
virtual void Interface2()=;
}; class ConcreteElementA : public Element
{
public:
void Accept(Visitor* pVisitor)
{
pVisitor->Visit(this);
}
void Interface1() { cout<<"ConcreteElementA::Interface1"<<endl; }
void Interface2() { cout<<"ConcreteElementA::Interface2"<<endl; }
}; class ConcreteElementB : public Element
{
public:
void Accept(Visitor* pVisitor)
{
pVisitor->Visit(this);
}
void Interface1() { cout<<"ConcreteElementB::Interface1"<<endl; }
void Interface2() { cout<<"ConcreteElementB::Interface2"<<endl; }
}; void ConcreteVisitorA::Visit(Element* pElement)
{
pElement->Interface1();
} void ConcreteVisitorB::Visit(Element* pElement)
{
pElement->Interface2();
} class Structure
{
public:
virtual ~Structure()
{
for (unsigned int i = ; i < m_elementList.size(); i++)
{
delete m_elementList[i];
}
m_elementList.clear();
} void Accept(Visitor* pVisitor)
{
for (unsigned int i = ; i < m_elementList.size(); i++)
{
m_elementList[i]->Accept(pVisitor);
}
} void AddElement(Element* pElement)
{
m_elementList.push_back(pElement);
}
private:
vector<Element*> m_elementList;
}; int main(int argc, char *argv[])
{
Structure structure; structure.AddElement(new ConcreteElementA);
structure.AddElement(new ConcreteElementB); Visitor* pVisitorA = new ConcreteVisitorA;
Visitor* pVisitorB = new ConcreteVisitorB; structure.Accept(pVisitorA);
structure.Accept(pVisitorB); DESTROY_POINTER(pVisitorA);
DESTROY_POINTER(pVisitorB); return ;
}
最新文章
- 【转】 Camera模仿3D效果的小例子(图片无限旋转)
- Monkey的ADB命令简单使用示例和解析
- react验证码倒计时
- tomcat报错
- pylab模式
- linux 缺少动态连接库.so--cannot open shared object file: No such file or directory
- HDU 4712:Hamming Distance
- 理解EnterCriticalSection 临界区
- 矩形嵌套 南阳理工ACM
- Android Failure [INSTALL_FAILED_OLDER_SDK]
- ORA-04021
- 第25篇 jQuer快速学习(上)---选择器和DOM操作
- 浅析Java中synchronized与static synchronized
- HDU 2544 最短路(模板题——Floyd算法)
- CFS调度器(1)-基本原理
- LINUX-redis &; mongodb
- 跟着未名学Office – 整体了解 Ms Office 2010
- Django Rest Framework源码剖析(六)-----序列化(serializers)
- 004.KVM日常管理1
- consul读取key value