设计模式-观察者模式(c++)
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
类图
#include#include<string> #include 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) { // TODO Auto-generated constructor stub name = n; } void moneyUp() { // TODO Auto-generated method stub cout<
"买了一些股票(股票升了)"<<endl; } void moneyDown() { // TODO Auto-generated method stub cout< "股票降价了,哭了"<<endl; } }; class Subject { protected: list olist; public: Subject() { // TODO Auto-generated constructor stub } 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){ //list ::iterator p = olist.begin(); for (list::const_iterator p = olist.begin(); p != olist.cend(); ++p){ (*p)->moneyUp(); //&(*p).moneyUp(); } } } void down(double a) { if (a > 0.05){ list ::iterator p = olist.begin(); for (; p != olist.end(); ++p){ (*p)->moneyDown(); } } } }; int main(){ // TODO Auto-generated constructor stub Subject *f = new GuPiao(); // Subject GuMin *g1 = new GuMin("李峰股民"); GuMin *g2 = new GuMin("王磊股民"); f->add(g1); f->add(g2); cout<<"股票升了"<<endl; f->up(0.1); cout<<"比率小于0.05"<<endl; f->down(0.001); cout<<"股票降了"<<endl; f->down(0.1); cout<<"比率小于0.05"<<endl; f->down(0.001); }