观察者模式(行为型模式)
来源:互联网 发布:浪潮软件新闻 编辑:程序博客网 时间:2024/05/29 07:02
观察者模式是一种描述类之间的关系的模式,比较类似广播网络和邮件订阅。通常是一种一对多的关系,也可以转变成多对多的关系。当一个对象发生改变的时候所有依赖这个对象的其他对象都会得到通知。
这个只是最简单的模型,实际工作中会遇到各种变形吧,根据实际情况最一些调整,整体的观察者模式是这个样子的结构
我们举一个简单的例子来说明这种关系:
Subject(被观察者的接口类)Observer(观察者的接口类)SubjectA(被观察者的实现类)ObserverA(观察者的实现类)
class Observer{public : virtual void Update() = 0; //获得通知后观察者的更新函数 virtual ~Observer() {}};class Subject{public : virtual void Attach(Observer* ob) = 0; //注册观察者 virtual void Detach(Observer* ob) = 0; //删除观察者 virtual void Notify() = 0; //通知所有观察者 virtual ~Subject() {}};class SubjectA : public Subject{public : SubjectA(); ~SubjectA();public : virtual void Attach(Observer* ob); virtual void Detach(Observer* ob); virtual void Notify();private : std::list<Observer*> m_observerList;};SubjectA::SubjectA(){}SubjectA::~SubjectA(){}void SubjectA::Attach(Observer* ob){ auto it = std::find(m_observerList.begin(), m_observerList.end(), ob); if (it == m_observerList.end()) m_observerList.push_back(ob);}void SubjectA::Detach(Observer* ob){ auto it = std::find(m_observerList.begin(), m_observerList.end(), ob); if (it != m_observerList.end()) m_observerList.erase(it);}void SubjectA::Notify(){ auto it = m_observerList.begin(); for (; it != m_observerList.end(); ++it) { (*it)->Update(); }}class ObserverA : public Observer{public : ObserverA(); ~ObserverA();public : virtual void Update(); void SetSubject(Subject* sub);private : Subject* m_subject; // 保存被观察者的指针,这样方便或者被观察者的一些状态};ObserverA::ObserverA(){};ObserverA::~ObserverA(){}void ObserverA::SetSubject(Subject* sub){ m_subject = sub;}void ObserverA::Update(){ //do something}int main(){ SubjectA* sub = new SubjectA; ObserverA* ob = new ObserverA; sub->Attach(ob); ob->SetSubject(sub); return 0;}
这个只是最简单的模型,实际工作中会遇到各种变形吧,根据实际情况最一些调整,整体的观察者模式是这个样子的结构
0 0
- 观察者模式(行为型)
- 行为型模式-----观察者模式(Observer)
- 观察者模式(行为型模式)
- (行为型模式三)观察者模式
- 行为型-观察者模式
- 行为型模式-观察者
- 行为型--观察者模式
- 观察者模式(行为型)
- 观察者模式(行为型)
- 观察者模式(行为型)
- 行为型模式-观察者模式
- 设计模式——观察者模式(行为型模式)
- Java设计模式之行为型模式(观察者模式)
- 设计模式 - 行为型模式 - 观察者模式
- 设计模式->行为型模式->观察者模式
- Observer观察者(行为型模式)
- 十九、观察者模式Observer(行为型)
- 行为型-观察者模式(Observer)
- PyDev的注释快捷键
- 由于CSDN各产品线都是独立的
- 透过宏定义了解MFC消息映射
- CSDN需要登录验证的产品线
- 线程的学习
- 观察者模式(行为型模式)
- SpringMVC拦截器简单使用
- 手机软件升级文件如何恢复
- os开发中iphone模拟器中程序文件和数据库的存放位置
- 修改linux文件权限命令:chmod
- 一步步学习微软InfoPath2010和SP2010--第十三章节--SharePoint视图和仪表板(5)--库web部件
- 人大原副委员长成思危:有能力买房要赶紧下手
- 线程学习(2)
- include<stdio.h>