每日博客
观察者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
C++版
#include<iostream>
#include<string>
#include<list>
using namespace std;
class Observer {
public: virtual void moneyUp() = 0;
virtual void moneyDown() = 0;
};
class GuMin :public Observer {
private: string name;
public: GuMin(string n) {
name = n;
}
void moneyUp() {
cout << name << "买" << endl;
}
void moneyDown() {
cout << name << "大哭一场" << endl;
}
};
class Subject {
protected: list<Observer*> olist;
public:
Subject() {
}
void add(Observer *o) {
olist.push_back(o);
}
void remove(Observer *o) {
olist.remove(o);
}
virtual void up(double a) {};
virtual void down(double a) {};
};
class GuPiao :public Subject {
public:
GuPiao() {
}
void up(double a) {
if (a > 0.05) {
for (list<Observer*>::const_iterator p = olist.begin(); p != olist.cend(); ++p) {
(*p)->moneyUp();
}
}
}
void down(double a) {
if (a > 0.05) {
list<Observer*>::iterator p = olist.begin();
for (; p != olist.end(); ++p) {
(*p)->moneyDown();
}
}
}
};
int main() {
Subject *f = new GuPiao();
GuMin *g = new GuMin("股民");
f->add(g);
cout << "股票升了" << endl;
f->up(0.1);
f->down(0.001);
cout << "股票降了" << endl;
f->down(0.1);
f->down(0.001);
return 0;
}