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

67 lines
1.1 KiB
C++

#ifndef __DEMO_H__
#define __DEMO_H__
// 抽象访问者 Visitor
class Visitor
{
public:
virtual ~Visitor() {}
virtual void visit(ConcreteElementA *) = 0;
virtual void visit(ConcreteElementB *) = 0;
};
// 具体访问者 ConcreteVisitor
class ConcreteVisitor : public Visitor
{
public:
// 实现一种针对特定元素的访问操作
void visit(ConcreteElementA *)
{
// 元素A的访问操作代码
}
void visit(ConcreteElementB *)
{
// 元素A的访问操作代码
}
};
// 抽象元素
class Element
{
public:
virtual ~Element() {}
// 声明抽象方法,以一个抽象访问者的指针作为函数参数
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:
list<Element *> elementList;
};
#endif