标签:
访问者设计模式
1.在”element“里面添加一个accept(Visitor)方法
2、创建一个”visitor”基类 ,并且为每一个”element创建一个visit()方法。
3、创建一个visitor的派生类然后执行相应的”elements”操作。
4、客户端创建”visitor”对象并且根据传入的类型来调用 相应的accept();
// // main.cpp // visitor_Design_pattern // // Created by apple on 15/5/24. // Copyright (c) 2015年 apple. All rights reserved. // #include <iostream> #include <string> using namespace std; //1、在"element"类中添加一个accept(visitor)方法 class Element{ public: virtual void accept(class Visitor &v)=0; }; class This: public Element { public: /*虚函数*/void accept(Visitor &v); string thiss() { return "This"; } }; class That:public Element{ public: /*虚函数*/ void accept(Visitor &v); string that(){ return "That"; } }; class TheOther:public Element{ public: /*虚函数*/ void accept(Visitor &v); string theOther(){ return "TheOther"; } }; //2.创建 一个Vistor的基类,根据"element“的类型来执行相应的visit()方法 class Visitor{ public: virtual void visit(This *e)=0; virtual void visit(That *e)=0; virtual void visit(TheOther *e)=0; }; void This::accept(Visitor &v){ v.visit(this); } void That::accept(Visitor &v) { v.visit(this); } void TheOther::accept(Visitor &v) { v.visit(this); } //3、创建一个"visitor"派生类来实现具体的"elements”的操作 class upVisitor:public Visitor{ void visit(This *e) { cout<<"do up on"+e->thiss()<<‘\n‘; } void visit(That *e) { cout<<"do up on"+e->that()<<‘\n‘; }void visit(TheOther *e) { cout<<"do up on"+e->theOther()<<‘\n‘; } }; class DownVisitor:public Visitor{ void visit(This *e) { cout<<"do down on"+e->thiss()<<‘\n‘; } void visit(That *e) { cout<<"do down on"+e->that()<<‘\n‘; }void visit(TheOther *e) { cout<<"do down on"+e->theOther()<<‘\n‘; } }; int main(int argc, const char * argv[]) { Element *list[]={ new This(),new That(),new TheOther() }; upVisitor up;//客户端创建 DownVisitor down; for (int i=0; i<3; i++) list[i]->accept(up); for (int i=0; i<3; i++) { list[i]->accept(down); } }
标签:
原文地址:http://www.cnblogs.com/tianyake/p/4525575.html