5.11 访问者模式 visitor
来源:互联网 发布:淘宝拍摄摄影 编辑:程序博客网 时间:2024/05/16 00:44
1.意图:
封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。
2.结构图
3.源码
//Element.h#ifndef _ELEMENT_H_#define _ELEMENT_H_class Visitor;class Element{ public: virtual ~Element(); virtual void Accept(Visitor* vis) = 0; protected: Element() ; private: }; class ConcreteElementA:public Element { public: ConcreteElementA(); ~ConcreteElementA(); void Accept(Visitor* vis); protected: private: }; class ConcreteElementB:public Element { public: ConcreteElementB(); ~ConcreteElementB(); void Accept(Visitor* vis); protected: private: }; #endif //~_ELEMENT_H_
//Visitor.h#ifndef _VISITOR_H_#define _VISITOR_H_class ConcreteElementA;class ConcreteElementB;class Element;class Visitor{public :virtual ~Visitor();virtual voidVisitConcreteElementA(Element*elm)=0;virtual voidVisitConcreteElementB(Element*elm)=0;protected:Visitor();private:};class ConcreteVisitorA:public Visitor{public :ConcreteVisitorA();virtual ~ConcreteVisitorA();virtual voidVisitConcreteElementA(Element*elm);virtual voidVisitConcreteElementB(Element*elm);protected:private:};class ConcreteVisitorB:public Visitor{public :ConcreteVisitorB();virtual ~ConcreteVisitorB();virtual voidVisitConcreteElementA(Element*elm);virtual voidVisitConcreteElementB(Element*elm);protected:private:};#endif//~_VISITOR_H_
//Element.cpp#include "Element.h"#include "Visitor.h"#include <iostream>using namespace std;Element::Element(){}Element::~Element(){}void Element::Accept(Visitor*vis){}ConcreteElementA::ConcreteElementA(){}ConcreteElementA::~ConcreteElementA(){}void ConcreteElementA::Accept(Visitor*vis){vis->VisitConcreteElementA(this);cout<<"visiting ConcreteElementA..."<<endl;}ConcreteElementB::ConcreteElementB(){}ConcreteElementB::~ConcreteElementB(){}void ConcreteElementB::Accept(Visitor*vis){vis->VisitConcreteElementB(this);cout<<"visiting ConcreteElementB..."<<endl;}
//Visitor. cpp #include "Visitor.h"#include "Element.h" #include <iostream> using namespace std; Visitor::Visitor() { } Visitor::~Visitor () { } ConcreteVisitorA::ConcreteVisitorA(){ } ConcreteVisitorA::~ConcreteVisitorA(){ } void ConcreteVisitorA::VisitConcreteElementA(Element*elm){ cout<< "i will visit ConcreteElementA..."<<endl; } void ConcreteVisitorA::VisitConcreteElementB(Element*elm){ cout<< "i will visit ConcreteElementB..."<<endl;} ConcreteVisitorB::ConcreteVisitorB(){ } ConcreteVisitorB::~ConcreteVisitorB(){ } void ConcreteVisitorB::VisitConcreteElementA(Element*elm){ cout<< "i will visitConcreteElementA..."<<endl;} void ConcreteVisitorB::VisitConcreteElementB(Element*elm){ cout<< "i will visit ConcreteElementB..."<< endl; }
#include "Element.h"#include "Visitor.h"#include <iostream>using namespace std;int main(int argc,char*argv[]){Visitor*vis=new ConcreteVisitorA();Element*elm=new ConcreteElementA();elm->Accept(vis);getchar();return 0;}
- 5.11 访问者模式 visitor
- 访问者模式(Visitor Pattern)
- 访问者模式(Visitor Pattern)
- 访问者(Visitor)模式
- Visitor访问者模式
- 访问者(Visitor)模式
- 访问者模式(Visitor Pattern)
- 访问者模式(Visitor)
- Visitor - 访问者模式
- Visitor 访问者模式
- 访问者模式(Visitor Pattern)
- 访问者模式 Visitor
- Visitor(访问者模式)
- 22.访问者模式--Visitor
- 访问者模式 Visitor Pattern
- Visitor访问者模式
- Java 访问者模式(Visitor)
- 访问者模式(Visitor Pattern)
- Eclipse安装OpenExplorer插件(Mac、Windows通用)
- 内部排序之堆排序
- java 修饰符
- 用贪心法求解背包问题
- iPhone开发环境
- 5.11 访问者模式 visitor
- 长大了,我们不能轻易动情,因为伤不起:伤感日志
- (百例编程)80.奇数平方的一个有趣的性质
- 简析多线程
- Ubuntu配置和修改IP地址
- Discrete Mathematics——05 谓词逻辑的等值演算与推理
- Discrete Mathematics——04 一阶谓词逻辑基本概念
- Discrete Mathematics——03 命题逻辑的推理理论
- Discrete Mathematics——02 命题逻辑等价与联接词完备