DesignPattern/24.VisitorPattern/2.Code/Demo.h

59 lines
945 B
C++

#ifndef __DEMO_H__
#define __DEMO_H__
// 抽象访问者 Visitor
class Visitor
{
public:
virtual void visit(ConcreteElementA*) = 0;
virtual void visit(ConcreteElementB*) = 0;
};
// 具体访问者 ConcreteVisitor
class ConcreteVisitor :public Visitor
{
public:
// 实现一种针对特定元素的访问操作
void visit(ConcreteElementA*){
// 元素A的访问操作代码
}
void visit(ConcreteElementB*){
// 元素B的访问操作代码
}
};
// 抽象元素
class Element
{
public:
// 声明抽象方法,以一个抽象访问者的指针作为函数参数
virtual void accept(Visitor*) = 0;
};
// 具体元素
class ConcreteElement :public Element
{
public:
void accept(Visitor* visitor){
visitor->visit(this);
}
};
// 对象结构
class ObjectStructure
{
public:
// 提供接口接受访问者访问
void accept(Visitor* visitor){
// 遍历访问对象结构中的元素
for (){
elementList[i]->accept(visitor);
}
}
void addElement(){}
void removeElement(){}
private:
lsit<Element*>elementList;
};
#endif