c++设计模式-----observer(观察者模式)
来源:互联网 发布:潘石屹三段婚姻知乎 编辑:程序博客网 时间:2024/06/06 05:18
意图:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
适用性:
当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的
我们来举一个博客的例子,博主写好了一篇博文,发布之后有两个读者在阅读博文,当博主发现一些博文需要修改,修改之后重新发布,那么正在阅读的两个读者应该都能都到通知多好!下面就按照上面uml图来实现这样的一个例子:#include <iostream>#include <string>#include <vector>#include <list>using namespace std;class Observer{public:Observer(){}virtual ~Observer(){}virtual void Update(){};};class Blog{public:Blog(){}virtual ~Blog(){}void Attach(Observer* observer){vec_observer.push_back(observer);}void Romve(Observer* observer){vector<Observer*>::iterator iter;for (iter = vec_observer.begin(); iter != vec_observer.end(); ++iter){if ((*iter) == observer)vec_observer.erase(iter);}}void Notify(){vector<Observer*>::iterator iter;for (iter = vec_observer.begin(); iter != vec_observer.end(); ++iter){(*iter)->Update();}}virtual void SetStatus(string sts){}virtual string GetStatus() { return m_status; };private:vector<Observer*> vec_observer;protected:string m_status;};class ConcreteBlog :public Blog{public:ConcreteBlog(string name):m_blog_name(name){}~ConcreteBlog(){}void SetStatus(string sts){m_status = "csdn通知: " + m_blog_name + sts;}string GetStatus(){return m_status;}private:string m_blog_name;};class ConcreteObserver :public Observer{private:string m_observer_name;Blog *m_blog;public:ConcreteObserver(string name, Blog* blog) :m_observer_name(name), m_blog(blog){}~ConcreteObserver(){}void Update(){string status = m_blog->GetStatus();cout << m_observer_name << "-----------" << status << endl;}};int main(){Blog *blog = new ConcreteBlog("chenxun");Observer *ob1 = new ConcreteObserver("xiaowang", blog);Observer *ob2 = new ConcreteObserver("xiaozhang", blog);blog->Attach(ob1);blog->Attach(ob2);blog->SetStatus("发表了新博客");blog->Notify();delete blog;delete ob1;delete ob2;return 0;}
0 0
- 设计模式----观察者模式Observer(C++)
- 设计模式--观察者(Observer)
- 设计模式-观察者(Observer)
- 观察者设计模式(Observer)
- Observer(观察者)设计模式
- Observer 观察者模式 (HeadFirst设计模式 c#)
- 观察者设计模式Observer
- 观察者设计模式(observer)
- observer(观察者设计模式)
- Observer(观察者)设计模式
- 设计模式之Observer(观察者模式)
- 设计模式之Observer(观察者模式)
- 设计模式 (十五)观察者模式(Observer)
- 设计模式 (十五)观察者模式(Observer)
- 【设计模式】之观察者模式(Observer)
- 设计模式之--观察者模式(Observer)
- 设计模式(二)Observer - 观察者模式
- 设计模式之观察者(Observer)模式
- 安全cookie登录状态设计方案
- 使用VirtualBox + Vagrant打造属于自己的开发环境1
- LintCode -- 不同的子序列
- HDU 4293 Groups(dp)
- 优化LINUX内核阻挡SYN洪水攻击
- c++设计模式-----observer(观察者模式)
- apache双向HTTPS SSL认证配置
- GitHub入门与实践一
- OJ学习笔记2
- [九度OnlineJudge][剑指Offer]题目1387:斐波那契数列
- oracle交流趣事--主机名变更在跑某报告信息时变更的小细节
- 获取当前程序可执行文件的所在路径
- Hbase用户权限
- UVALive 5990 Array Diversity