设计模式-访问者模式
来源:互联网 发布:上古卷轴5御姐捏脸数据 编辑:程序博客网 时间:2024/06/16 02:27
访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
例子:男人和女人在不同的状态下会有不同反应,采用访问者模式,可以增加状态很方便
UML:
class Man;class Woman;//抽象状态类class Action {public: virtual void GetManConclusion(Man *man) {} //男人反应 virtual void GetWomanConclusion(Woman *woman) {} //女人反应};class Person {public: virtual void Accpet(Action *visitor) = 0; //获得状态};//男人class Man :public Person { void Accpet(Action *visitor) { visitor->GetManConclusion(this); }};//女人class Woman :public Person {public: void Accpet(Action *visitor) { visitor->GetWomanConclusion(this); }};//成功状态class Success :public Action {public: void GetManConclusion(Man *man) { cout << "Man成功时,背后多半有一个伟大的女人" << endl; } void GetWomanConclusion(Woman *woman) { cout << "Woman成功时,背后多半有一个不成功的男人" << endl; }};//失败状态class Failed :public Action {public: void GetManConclusion(Man *man) { cout << "Man失败时,闷头喝酒,谁也不用劝" << endl; } void GetWomanConclusion(Woman *woman) { cout << "Woman失败时,眼泪汪汪,谁也劝不了" << endl; }};//对象结构class ObjectStructure {private: list<Person*> elements;public: void Attach(Person *person) //添加对象 { elements.push_back(person); } void Detach(Person *person) //删除对象 { elements.remove(person); } void Display(Action *visitor) //显示 { for (auto p : elements) { p->Accpet(visitor); } }};int main(){ ObjectStructure o; o.Attach(new Man()); o.Attach(new Woman()); Success *v1 = new Success(); o.Display(v1); Failed *v2 = new Failed(); o.Display(v2); system("pause"); return 0;}
1 0
- 设计模式 访问者模式
- 设计模式 - 访问者模式
- 设计模式:访问者模式
- 设计模式 - 访问者模式
- 设计模式 - 访问者模式
- 设计模式------------访问者模式
- 设计模式:访问者模式
- 设计模式--访问者模式
- 设计模式--访问者模式
- 设计模式-访问者模式
- 设计模式--访问者模式
- 设计模式-访问者模式
- 设计模式-访问者模式
- [设计模式]访问者模式
- 设计模式 - 访问者模式
- 设计模式-访问者模式
- 设计模式-访问者模式
- 设计模式-访问者模式
- leetcode#437 Path Sum III
- Educational Codeforces Round 19 B. Odd sum
- unity3d用欧拉角(eulerAngles)给刚体直接加速度(velocity )的算法举例
- javascript---生成器(generator)
- KMP算法
- 设计模式-访问者模式
- python调用matlab环境配置,非常详细!!!
- java 类加载-初始化顺序
- ZOJ2388 Beat the Spread!
- Maven scope介绍
- 二叉树、满二叉树、完全二叉树、二叉排序树(二叉查找树)、平衡二叉树
- LeetCode 026 Remove Duplicates from Sorted Array
- Jquery-zTree的基本用法
- propertyanimator(属性动画)之valuesanimator(动画执行类)