观察者模式

一、问题描述

实验课上,老师因故暂时离开,A君与B君要游戏,但怕被抓,就委托门口的Spy同学盯梢。老师回来了,Spy分别通知A君和B君,关闭游戏,赶紧编程。

二、完成如下题目要求

(1)画出静态图

写出采用该设计模式的好处

1.观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口2.观察者模式支持广播通讯。被观察者会向所有的登记过的观察者发出通知

编写代码

#include <iostream>#include <string>#include <list>using namespace std;class Subject;//抽象观察者class Observer{ protected: string name; Subject *sub; public: Observer(string name, Subject *sub) { this->name = name; this->sub = sub; } virtual void update() = 0;};//具体的观察者,A君玩游戏 class GamePlayerA :public Observer{ public: GamePlayerA(string name, Subject *sub) :Observer(name, sub) { } void update();};//具体的观察者,B君玩游戏 class GamePlayerB :public Observer{ public: GamePlayerB(string name, Subject *sub) :Observer(name, sub) { } void update();};//抽象通知者class Subject{ protected: list<Observer*> observers; public: string action; virtual void attach(Observer*) = 0; virtual void detach(Observer*) = 0; virtual void notify() = 0;};//具体通知者,Spyclass Spy :public Subject{ void attach(Observer *observer) { observers.push_back(observer); } void detach(Observer *observer) { list<Observer *>::iterator iter = observers.begin(); while (iter != observers.end()) { if ((*iter) == observer) { observers.erase(iter); } ++iter; } } void notify() { list<Observer *>::iterator iter = observers.begin(); while (iter != observers.end()) { (*iter)->update(); ++iter; } }};void GamePlayerA::update(){ cout << name << ” 收到消息:” << sub->action << endl; if (sub->action == “老师来了!”) { cout << “A君关闭游戏,赶紧编程” << endl; }}void GamePlayerB::update(){ cout << name << ” 收到消息:” << sub->action << endl; if (sub->action == “老师来了!”) { cout << “B君关闭游戏,赶紧编程” << endl; }}int main(){ Subject *dwq = new Spy(); //创建观察者 //被观察的对象 Observer *a = new GamePlayerA(“A君”, dwq); Observer *b = new GamePlayerB(“B君”, dwq); //加入观察队列 dwq->attach(a); dwq->attach(b); //事件 cout<<“Spy通知:老师离开”<<endl; dwq->action = “打游戏”; dwq->notify(); cout << endl; cout<<“Spy通知:老师来了”<<endl; dwq->action = “老师来了!”; dwq->notify(); return 0;}

那段岁月,无论从何种角度读你,你都完美无缺,

观察者模式

相关文章:

你感兴趣的文章:

标签云: