观察者模式
来源:互联网 发布:淘宝买家订单数据诈骗 编辑:程序博客网 时间:2024/06/06 17:33
V0.1 传统方式
class StockTeammate{public:StockTeammate(std::string arg, Secretary& sec);void update();private:std::string name;};class Secretary{public:void add(StockTeammate& s);void alarm();private:std::vector<StockTeammate> teammate;};
StockTeammate::StockTeammate(string arg, Secretary& s):name(arg){s.add(*this);}void StockTeammate::update(){cout<<name<<" close stock and go to work"<<endl;}void Secretary::add(StockTeammate& s){teammate.push_back(s);}void Secretary::alarm(){vector<StockTeammate>::iterator it = teammate.begin();while(it!= teammate.end()){it->update();it++;}}
V0.2 对于听众进行抽象
class Teammate{public:Teammate();Teammate(std::string arg, Secretary& sec);virtual ~Teammate();virtual void update()=0;protected:std::string name;};class StockTeammate:public Teammate{public:StockTeammate(std::string arg, Secretary& sec);void update();};class NbaTeammate:public Teammate{public:NbaTeammate(std::string arg, Secretary& sec);void update();};class Secretary{public:void add(Teammate& s);void alarm();private:std::vector<Teammate*> teammate;};
Teammate::Teammate(){}Teammate::Teammate(string arg, Secretary& s):name(arg){s.add(*this);}Teammate::~Teammate(){}StockTeammate::StockTeammate(string arg, Secretary& s):Teammate(arg, s){}void StockTeammate::update(){cout<<name<<" close stock and go to work"<<endl;}NbaTeammate::NbaTeammate(string arg, Secretary& s):Teammate(arg, s){}void NbaTeammate::update(){cout<<name<<" close NBA and go to work"<<endl;}void Secretary::add(Teammate& s){teammate.push_back(&s);}void Secretary::alarm(){vector<Teammate*>::iterator it = teammate.begin();while(it!= teammate.end()){(*it)->update();it++;}}
V0.3对于观察者进行抽象
class Observer;class Teammate{public:Teammate();Teammate(std::string arg, Observer& sec);virtual ~Teammate();virtual void update()=0;protected:std::string name;};class StockTeammate:public Teammate{public:StockTeammate(std::string arg, Observer& sec);void update();};class NbaTeammate:public Teammate{public:NbaTeammate(std::string arg, Observer& sec);void update();};class Observer{public:virtual ~Observer();void add(Teammate& t);virtual void alarm()=0;protected:std::vector<Teammate*> teammate;};class Secretary:public Observer{public:void alarm();};class Boss:public Observer{public:void alarm();};
Teammate::Teammate(){}Teammate::Teammate(string arg, Observer& s):name(arg){s.add(*this);}Teammate::~Teammate(){}StockTeammate::StockTeammate(string arg, Observer& s):Teammate(arg, s){}void StockTeammate::update(){cout<<name<<" close stock and go to work"<<endl;}NbaTeammate::NbaTeammate(string arg, Observer& s):Teammate(arg, s){}void NbaTeammate::update(){cout<<name<<" close NBA and go to work"<<endl;}Observer::~Observer(){}void Observer::add(Teammate& s){teammate.push_back(&s);}void Secretary::alarm(){cout<<"This is Secretary alarm!"<<endl;vector<Teammate*>::iterator it = teammate.begin();while(it!= teammate.end()){(*it)->update();it++;}}void Boss::alarm(){cout<<"This is Boss alarm!"<<endl;vector<Teammate*>::iterator it = teammate.begin();while(it!= teammate.end()){(*it)->update();it++;}}
执行文件
int main(){Secretary s;Boss b;StockTeammate st1("Tom", s);StockTeammate st2("Terry", b);NbaTeammate nt1("John", s);s.alarm();b.alarm();return 0;}
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- Java 操作 Excel (读取Excel2003 2007,Poi实现)
- MFC入门级程序
- LINUX下执行SQL语句
- MVC实用架构设计(〇)——总体设计
- java高并发编程
- 观察者模式
- 很好的设计-服务端网络请求处理模型
- oracle 表解锁
- java线程安全问题笔记
- 分布式搜索elasticsearch java API 之(三)------索引数据
- 黑马程序员——内部类
- linux 打开文件数 too many open files 解决方法
- 由于logdown实在捉鸡,转到csdn
- 第12条:考虑实现Comparable接口