标签:
【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