码迷,mamicode.com
首页 > 其他好文 > 详细

访问者模式

时间:2015-05-27 22:45:17      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

1】什么是访问者模式?

  今天学习访问者模式,访问者模式是A对象访问了B对象的一种模式。非也。

那么,何谓访问者模式呢?其实真难理解!因为这个名字就TMD超晦涩,让人听不懂,或许只是此名本身有且仅有的一个抽象意义而已。

何谓抽象意义呢?如果你理解了《类的概念》大概你才会有所参透。

我一直理解:抽象是多态的爸爸。怎么解释呢?你想想:

类都是超级抽象的,而经由父类(即基类)衍生的子类(即派生类)就是 “多态” 的全部内在意义。

访问者模式,其实没那么复杂(呵呵!或许我理解有误),模式即一种做法,所以一句话概述:

把数据信息和操作行为各自分开处理而不放在一坨的做法。(要不,谁访问谁呀?你先琢磨琢磨)

【2】访问者模式代码示例:

代码示例1(一般写法):

 

#include <iostream>
#include <list>
#include <string>
using namespace std;

class Person
{
public:
    string action;
    virtual void getConclusion() = 0;
};

class Man : public Person
{
public:
    void getConclusion()
    {
        if (action == "成功")
        {
            cout << "男人成功时,背后多半有一个伟大的女人。" << endl;
        }
        else if (action == "恋爱")
        {
            cout << "男人恋爱时,凡事不懂装懂。" << endl;
        }
    }
};

class Woman : public Person
{
public:
    void getConclusion()
    {
        if (action == "成功")
        {
            cout << "女人成功时,背后多半有失败的男人。" << endl;
        }
        else if (action == "恋爱")
        {
            cout << "女人恋爱时,遇到事懂也装不懂。" << endl;
        }
    }
};

void main()
{
    list<Person*> persons;

    Person *pMan1 = new Man();
    pMan1->action = "成功";
    persons.push_back(pMan1);

    Person *pWoman1 = new Woman();
    pWoman1->action = "成功";
    persons.push_back(pWoman1);

    Person *pMan2 = new Man();
    pMan2->action = "恋爱";
    persons.push_back(pMan2);

    Person *pWoman2 = new Woman();
    pWoman2->action = "恋爱";
    persons.push_back(pWoman2);

    list<Person*>::iterator iter = persons.begin();
    while (iter != persons.end())
    {
        (*iter++)->getConclusion();
    }
}
//Result:
/*
男人成功时,背后多半有一个伟大的女人。
女人成功时,背后多半有失败的男人。
男人恋爱时,凡事不懂装懂。
女人恋爱时,遇到事懂也装不懂。
*/
转载自:http://www.cnblogs.com/Braveliu/p/3957007.html

 

访问者模式

标签:

原文地址:http://www.cnblogs.com/leijiangtao/p/4534532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!