c++设计模式(访问者模式)

来源:互联网 发布:java访问jenkins 编辑:程序博客网 时间:2024/05/19 02:21

  GOOD:适用于数据结构稳定的系统。它把数据结构和作用于数据结构上的操作分离开,使得操作集合
优点:新增加操作很容易,因为增加新操作就相当于增加一个访问者,访问者模式将有关的行为集中到一个访问者对象中
这里写图片描述

例:#include <iostream>#include <string>#include <vector>using namespace std;class Man;class Woman;//行为class Action{public:    virtual void GetManConclusion(Man* concreteElementA)=0;    virtual void GetWomanConclusion(Woman* concreteElementB)=0;};//成功class Success : public Action{public:    virtual void GetManConclusion(Man* concreteElementA)    {        cout<<"男人成功时,背后有个伟大的女人"<<endl;    }    virtual void GetWomanConclusion(Woman* concreteElementB)    {        cout<<"女人成功时,背后有个没用的男人"<<endl;    }};//失败class Failure : public Action{public:    virtual void GetManConclusion(Man* concreteElementA)    {        cout<<"男人失败时,背后有个伟大的女人"<<endl;    }    virtual void GetWomanConclusion(Woman* concreteElementB)    {        cout<<"女人失败时,背后有个没用的男人"<<endl;    }};//抽象人类class Person{public:    virtual void Accept(Action* visitor)=0;};//男人class Man : public Person{public:    virtual void Accept(Action* visitor)    {        visitor->GetManConclusion(this);    }};//女人class Woman : public Person{public:    virtual void Accept(Action* visitor)    {        visitor->GetWomanConclusion(this);    }};//对象结构类class ObjectStructure{private:    vector<Person*> m_personList;public:    void Add(Person* p)    {        m_personList.push_back(p);    }    void Display(Action* a)    {        vector<Person*>::iterator p = m_personList.begin();        while (p!=m_personList.end())        {            (*p)->Accept(a);            p++;        }    }};//客户端int main(){    ObjectStructure * os= new ObjectStructure();    os->Add(new Man());    os->Add(new Woman());    Success* success = new Success();    os->Display(success);    Failure* fl = new Failure();    os->Display(fl);    return 0;}
0 0
原创粉丝点击