Vistor访问者模式(C++访问者模式)
来源:互联网 发布:win7便签元数据损坏 编辑:程序博客网 时间:2024/05/22 03:45
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;}
3 0
- Vistor访问者模式(C++访问者模式)
- 访问者模式(Vistor Pattern)
- 设计模式之访问者模式(Vistor)
- 设计模式:访问者模式(Vistor)
- 设计模式:访问者模式(Vistor)
- 设计模式:访问者模式-vistor
- 设计模式(3)-访问者模式 Vistor Pattern
- C#设计模式之访问者模式(Vistor Pattern)
- 设计模式拾荒之访问者模式(Vistor Pattern)
- Java设计模式-访问者模式-Vistor
- [设计模式-行为型]访问者模式(Vistor)
- 深入浅出设计模式(十一):16.中介者模式(Mediator) 17.访问者模式(Vistor)
- 23种设计模式(23)_行为型_访问者模式(Vistor Pattern)
- 【C++】Chapter24:访问者模式
- Objective C--访问者模式
- Objevtive C 访问者模式
- Objective C--访问者模式
- 访问者(Visitor)模式
- uboot编译连接脚本文件uboot.lds
- 测试博客
- [HDU2993] MAX Average Problem && 斜率优化问题
- nyoj 10 skiing
- 无处不在的数据及处理方法简介
- Vistor访问者模式(C++访问者模式)
- LeetCode[Array]: Insert Interval
- vijosP1005超长数字串
- 城市遥感动态监测管理系统
- 关于登陆页面回车键的一些细节处理
- 苹果拒绝app原因—图文详解
- 事务基础知识-->Spring事务管理:http://www.iteye.com/topic/1124043
- Linux编译问题——/usr/bin/ld: cannot find -lxxx问题总结
- 查看csdn我的收藏