Design Pattern Visitor 访问者模式
2014-07-11 09:32
447 查看
访问者模式,就是我们已经有一系列的对象了,那么就可以使用一个visitor对象一次性遍历所有的对象,就好像这个visitor访问了所有这些对象一样,所以就叫访问者模式。
实现起来也很简单,就是三个基类,其他类都是这些基类的衍生类。
下面的Action类就是访问者类了,而Person类就是被访问的对象类,而House是一个接待容器,可以接待不同的Action类。
运行:
实现起来也很简单,就是三个基类,其他类都是这些基类的衍生类。
下面的Action类就是访问者类了,而Person类就是被访问的对象类,而House是一个接待容器,可以接待不同的Action类。
#include <stdio.h> #include <iostream> #include <string> #include <vector> using namespace std; class Person; class Action { public: string present; string gun; virtual void drinkBeer(Person *p) = 0; virtual void getAGun(Person *p) = 0; }; class ActionOne:public Action { public: ActionOne() { present = "Alcohol"; gun = "Laiser"; } void drinkBeer(Person *p); void getAGun(Person *p); }; class ActionTwo:public Action { public: ActionTwo() { present = "Beer"; gun = "Machine Gun"; } void getAGun(Person *p); void drinkBeer(Person *p); }; class Person { public: string something; virtual void receivedVisitor(Action *visitor) = 0; }; class Bill:public Person { public: Bill() { something = "food"; } void receivedVisitor(Action *visitor) { puts("\nVisitor to Bill bring :"); puts(visitor->present.c_str()); visitor->drinkBeer(this); } }; class Mark:public Person { public: Mark() { something = "Weapon"; } void receivedVisitor(Action *visitor) { puts("\nVisitor to Mark bring :"); puts(visitor->gun.c_str()); visitor->getAGun(this); } }; void ActionOne::drinkBeer(Person *p) { puts("Let's eat something"); puts(p->something.c_str()); } void ActionOne::getAGun(Person *p) { puts("Let's gear up"); puts(p->something.c_str()); } void ActionTwo::getAGun(Person *p) { puts("Let's gear up"); puts(p->something.c_str()); } void ActionTwo::drinkBeer(Person *p) { puts("Let's eat something"); puts(p->something.c_str()); } class House { protected: vector<Person *> vps; public: void addPerson(Person *p) { vps.push_back(p); } void receiver(Action *visitor) { for (int i = 0; i < (int)vps.size(); i++) { vps[i]->receivedVisitor(visitor); } } ~House() { for (int i = 0; i < (int)vps.size(); i++) { delete vps[i]; } } }; int main() { House house; house.addPerson(new Bill); house.addPerson(new Mark); ActionTwo gun; ActionOne drink; house.receiver(&gun); house.receiver(&drink); return 0; }
运行:
相关文章推荐
- Design Pattern Visitor 访问者设计模式
- 访问者(Visitor Pattern )模式
- 设计模式18:Visitor Pattern (访问者模式)
- 设计模式总结之Visitor Pattern(访问者模式)
- 设计模式——访问者(Visitor Pattern)
- Java Visitor Pattern(访问者模式)
- Design Pattern Visitor 訪问者设计模式
- 设计模式【访问者模式VisitorPattern】
- 《设计模式——基于C#的工程化实现及扩展》 Security Design Pattern 系列 4 角色模式(Role Pattern)
- 设计模式学习笔记(二十五)——Visitor访问者
- Visitor访问者模式
- 《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 4 角色模式(Role Pattern)
- singleton design pattern----------创建型模式之一
- Visitor访问者模式[GoF模式之一]
- [译]The Facade Pattern外观设计模式 from Chapter 6 of《Design Patterns Explained》
- 《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 3 检查点模式(Check Point)
- 《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 3 检查点模式(Check Point)
- 访问者(Visitor)模式
- 访问者模式 :Visitor(转自LoveCherry)
- 设计模式之Visitor(访问者)