C++实现观察者模式—2
来源:互联网 发布:长笛 知乎 编辑:程序博客网 时间:2024/04/27 20:20
多个主题对象,每个主题对象都有三个观察者,感觉有点问题,说不好。有问题请提出来。
/*观察者模式:定义一种一对多的依赖,让多个观察者同时观察一个对象,当对象状态发生变化时,会通知所有它的观察者*/#include <iostream>#include <list>#include <string>using namespace std;class Subject;class Observer{protected:string name;Subject *subject;public:Observer(Subject *subject, string name){this->subject = subject;this->name = name;}virtual void Update(){}};class Subject{list<Observer*> observers;public:void AddObserver(Observer *observer){observers.push_back(observer);}void RemoveObserver(Observer *observer){observers.remove(observer);}virtual void Notify(){list<Observer*>::iterator iter = observers.begin();for(; iter != observers.end(); iter++){(*iter)->Update();}}virtual string GetState(){return " ";}int GetObserverSize(){return observers.size();}};class ConcreteSubjectOne:public Subject{string state;public:ConcreteSubjectOne(string state){this->state ="One " + state;}string GetState(){return this->state;}};class ConcreteSubjectTwo:public Subject{string state;public:ConcreteSubjectTwo(string state){this->state ="Two " + state;}string GetState(){return this->state;}};class ConcreteObserverOne:public Observer{public:ConcreteObserverOne(Subject *subject, string name):Observer(subject, name){}void Update(){cout<<"Observer Type One: "<< name << " subject state is "<< subject->GetState()<<endl;}};class ConcreteObserverTwo:public Observer{public:ConcreteObserverTwo(Subject *subject, string name):Observer(subject, name){}void Update(){cout<<"Observer Type Two: "<< name << " subject state is "<< subject->GetState()<<endl;}};int main(){ConcreteSubjectOne *subject_1 = new ConcreteSubjectOne("subject__1");ConcreteSubjectTwo *subject_2 = new ConcreteSubjectTwo("subject__2");ConcreteObserverOne *observer1 = new ConcreteObserverOne(subject_1, "observer 1");ConcreteObserverOne *observer2 = new ConcreteObserverOne(subject_1, "observer 2");ConcreteObserverOne *observer3 = new ConcreteObserverOne(subject_1, "observer 3");ConcreteObserverTwo *observer4 = new ConcreteObserverTwo(subject_2, "observer 4");ConcreteObserverTwo *observer5 = new ConcreteObserverTwo(subject_2, "observer 5");ConcreteObserverTwo *observer6 = new ConcreteObserverTwo(subject_2, "observer 6");subject_1->AddObserver(observer1);subject_1->AddObserver(observer2);subject_1->AddObserver(observer3);subject_2->AddObserver(observer4);subject_2->AddObserver(observer5);subject_2->AddObserver(observer6);subject_1->Notify();subject_2->Notify();cout<<subject_1->GetObserverSize()<<endl;cout<<subject_2->GetObserverSize()<<endl;delete subject_1;delete subject_2;delete observer6;delete observer5;delete observer4;delete observer3;delete observer2;delete observer1;getchar();return 0;}
- C++实现观察者模式—2
- Objective C中实现观察者模式
- 观察者模式(C语言实现)
- 观察者模式实现2--事件
- 设计模式实现——观察者模式
- 【C++】Chapter10:观察者模式
- Objective C--观察者模式
- Objective C 观察者模式
- 观察者模式(C++)
- Objective C--观察者模式
- c版本观察者模式
- 【C++】观察者模式
- 观察者模式(C++)
- Object-c 观察者模式
- C++:观察者模式
- 观察者模式(C++)
- 【C#】观察者模式案例
- 观察者模式实现1
- Hibernate基础之十:一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))
- VMware中安装的Red Hat Enterprise Linux 5中文乱码
- linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
- 递归与分治之整数划分
- 高级 inline hook 技术
- C++实现观察者模式—2
- 十月7日
- hdu 3835 简单概率dp
- VS2010优秀插件
- 十招教你从程序员转向企业家
- 大数加法.减法.乘法.除法
- modbus协议功能码和常见问题
- queue的实现 数据结构
- sql server 数据库加强3