首页 > 代码库 > Vistor访问者模式(C++访问者模式)
Vistor访问者模式(C++访问者模式)
Visitor模式在不破坏类的前提下,为类提供增加新的新操作。
Visitor模式经常用于将更新的设计封装在一个类中,并且由待更改的类提供一个接受接口,其关键技术在于双分派技术,Element类提供接口,通过Accept实现具体使用哪一个具体的Visit操作;
C++设计模式原书中的代码:
#include <iostream> using namespace std; class Element; class Visitor { public: virtual ~Visitor(){} virtual void visitConElemA(Element* elm)=0; virtual void visitConElemB(Element* elm)=0; protected: Visitor(){} }; class ConcreteVisitorA:public Visitor { public: ConcreteVisitorA(){}; virtual ~ConcreteVisitorA(){}; void visitConElemA(Element* elm){cout<<"visit A";} void visitConElemB(Element* elm){cout<<"visit B";} }; class ConcreteVisitorB:public Visitor { public: ConcreteVisitorB(){}; virtual ~ConcreteVisitorB(){}; void visitConElemA(Element* elm){cout<<"visit A";} void visitConElemB(Element* elm){cout<<"visit B";} }; class Element { public: virtual ~Element(){}; virtual void Accept(Visitor* vis)=0; protected: Element(){}; }; class ConcreteElementA:public Element { public: ConcreteElementA(){} ~ConcreteElementA(){} void Accept(Visitor* vis) { cout<<"This is A interface "<<endl; vis->visitConElemA(this); } }; class ConcreteElementB:public Element { public: ConcreteElementB(){} ~ConcreteElementB(){} void Accept(Visitor* vis) { cout<<"This is B interface "; vis->visitConElemB(this); } }; void main() { Visitor* vis=new ConcreteVisitorA(); Element* elm=new ConcreteElementA(); elm->Accept(vis); delete elm; delete vis; }
Vistor访问者模式(C++访问者模式)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。