程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 訪問者設計模式,訪問者模式

訪問者設計模式,訪問者模式

編輯:C++入門知識

訪問者設計模式,訪問者模式


訪問者設計模式

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);

    }

   

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved