zoukankan      html  css  js  c++  java
  • 访问者设计模式

    访问者设计模式

    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()<<'
    ';
    
        }
    
        void visit(That *e)
    
        {
    
            cout<<"do up on"+e->that()<<'
    ';
    
        }void visit(TheOther *e)
    
        {
    
            cout<<"do up on"+e->theOther()<<'
    ';
    
        }
    
    };
    
    class DownVisitor:public Visitor{
    
        void visit(This *e)
    
        {
    
            cout<<"do down on"+e->thiss()<<'
    ';
    
        }
    
        void visit(That *e)
    
        {
    
            cout<<"do down on"+e->that()<<'
    ';
    
        }void visit(TheOther *e)
    
        {
    
            cout<<"do down on"+e->theOther()<<'
    ';
    
        }
    
    };
    
    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);
    
        }
    
       
    
    }
  • 相关阅读:
    xargs 原理&使用
    django1.7 HTML模板中{%url%}的使用
    2017/2/27
    对django rest_framework的个人理解
    restful api设计理念
    web service的理解
    如何重启mysql服务
    Navicat中MySQL server has gone away错误怎么办【转载】
    Why getting this error “django.db.utils.OperationalError: (1050, ”Table 'someTable' already exists“)”
    转:android service总结
  • 原文地址:https://www.cnblogs.com/tianyake/p/4525575.html
Copyright © 2011-2022 走看看