Design Pattern - Observer 观察者设计模式
2014-05-22 18:45
323 查看
Spy on enemy.
使用这个模式可以根据某些事件自动更新。
设计思路:
1 设计一个基类,作为需要观察一个时间行为的接口类
2 设计一个观察者类,可以观察所有基类的衍生类, 这里使用set来保存这些需要更新的类。
一个事件相当于一个函数,事件发生(调用函数)同时自动调用需要更新的函数动作。
运行:
使用这个模式可以根据某些事件自动更新。
设计思路:
1 设计一个基类,作为需要观察一个时间行为的接口类
2 设计一个观察者类,可以观察所有基类的衍生类, 这里使用set来保存这些需要更新的类。
一个事件相当于一个函数,事件发生(调用函数)同时自动调用需要更新的函数动作。
#pragma once #include <iostream> #include <string> #include <set> #include <vector> using namespace std; class Observer_Enemy { public: virtual void update(string name) = 0; }; class Watcher_Enemy { public: virtual void registerObserver(Observer_Enemy *ob) = 0; virtual void removeObserver(Observer_Enemy *ob) =0; virtual void notifyObserver() = 0; }; class SpyOnEnemy : public Watcher_Enemy { set<Observer_Enemy *> obs; string enemy; public: SpyOnEnemy():obs(), enemy() { } void registerObserver(Observer_Enemy *ob) { obs.insert(ob); } void enemyMove(string en) { enemy = en; notifyObserver(); } void notifyObserver() { for (auto x:obs) { x->update(enemy); } } void removeObserver(Observer_Enemy *ob) { obs.erase(ob); } }; class airForce : public Observer_Enemy { public: void update(string n) { cout<<"\nEnemy "<<n<<" move.\n" <<"AirForce get ready, moving out...\n"; } }; class Marine : public Observer_Enemy { public: void update(string n) { cout<<"\nEnemy "<<n<<" move.\n" <<"Marine take action...\n"; } }; class Tank : public Observer_Enemy { public: void update(string n) { cout<<"\nEnemy "<<n<<" move.\n" <<"Tank is ready, rolling...\n"; } }; void ObserVer_Enemy_Run() { airForce airforce; Marine marine; Tank tank; SpyOnEnemy watcher; watcher.registerObserver(&airforce); watcher.registerObserver(&marine); watcher.registerObserver(&tank); string enemy; while (getline(cin, enemy)) { watcher.enemyMove(enemy); } watcher.removeObserver(&airforce); watcher.enemyMove("The Last Soilder"); }
运行:
相关文章推荐
- Design Pattern(设计模式- 行为模式)-------Observer(观察者)
- 设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 观察者模式(Observer) - Java实现
- 设计模式之观察者模式 (Observer Design Pattern)
- 设计模式之观察者模式(Observer Pattern)(一)
- Java设计模式之Observer(观察者)模式
- java设计模式学习系列之六:Observer, 观察者模式---小例
- 设计模式笔记--行为型模式之七Observer--观察者
- 设计模式笔记 18. Observer 观察者模式(行为型模式)
- IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式
- 设计模式学习2——观察者模式(Observer)
- 我读设计模式之观察者模式(Observer Pattern)
- 设计模式之观察者(Observer)模式与其C++通用实现(上)
- C#设计模式-观察者observer模式实现
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- 设计模式之Observer(观察者)
- 设计模式之观察者模式(Observer Pattern)(二)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式之观察者Observer
- 观察者设计模式Observer