介绍
visitor模式,又叫访问者模式,把结构和数据分开,编写一个访问者,去访问数据结构中的元素,然后把对各元素的处理全部交给访问者类。这样,当需要增加新的处理时候,只需要编写新的 访问者类,让数据结构可以接受访问者的访问即可。
参与者
visitor 访问者
concretevisitor 具体访问者
ele 数据
concreteele 具体数据类
class Ele;
class Visitor {
public:
virtual void visitor(Ele &) = 0;
};
class Ele{
public:
virtual void Accept(Visitor &visitor) = 0;
};
class ConcreteVisitor : public Visitor{
public:
void visitor(Ele &)
{
std::cout<<"Visitor 处理 Ele 的数据"<<std::endl;
}
};
class ConcreteEle : public Ele{
public:
void Accept(Visitor& visitor) override
{
visitor.visitor(*this);
}
};
int main()
{
Ele *ele = new ConcreteEle();
ConcreteVisitor v;
v.visitor(*ele);
return 0;
}
特点
- 易于增加新的操作
- 访问者集中相关的操作,分离无关的操作
- 增加新的ConcreteEle类 很困难,因为要在visitor基类中增加访问的方法
- 破坏封装性
参考
- 《设计模式:可复用面向对象软件设计的基础》
- https://www.cnblogs.com/wangxinblog/p/7695240.html
网友评论