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

    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
  • 相关阅读:
    [LeetCode][JavaScript]Combination Sum II
    [LeetCode][JavaScript]Generate Parentheses
    [LeetCode][JavaScript]Contains Duplicate
    [LeetCode][JavaScript]Regular Expression Matching
    [LeetCode][JavaScript]Combination Sum
    [LeetCode][JavaScript]Two Sum
    Windows Live Writer的Markdown插件MarkdownInLiveWriter支持语法高亮了
    各种Markdown处理器的列表
    用ChooseALicense帮自己选一个开源license,然后用AddALicense给自己的github自动加上license文件
    遇到奇怪的C#/C/C++或者Java的bug可以去问问Coverity
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4534532.html
Copyright © 2011-2022 走看看