设计模式-观察者模式
来源:互联网 发布:xmind是什么软件 编辑:程序博客网 时间:2024/06/05 16:09
适用模式:多个观察者同时监听一个主题对象.
// subject.h#ifndef SUBJECT_H#define SUBJECT_H#include <vector>#include "observer.h"class Observer;class Subject{public: Subject(); virtual void Attach(Observer * observer) = 0; virtual void Nofity() = 0;public: int m_message; std::vector<Observer*> m_observers;};#endif // SUBJECT_H
// subject.cpp#include "subject.h"Subject::Subject(){ m_message = 0;}
// concretesubject.h#ifndef CONCRETESUBJECT_H#define CONCRETESUBJECT_H#include "subject.h"class ConcreteSubject : public Subject{public: ConcreteSubject(); virtual void Attach(Observer * observer); virtual void Nofity();};#endif // CONCRETESUBJECT_H
// concretesubject.cpp#include "concretesubject.h"ConcreteSubject::ConcreteSubject(){}void ConcreteSubject::Attach(Observer *observer){ m_observers.push_back(observer);}void ConcreteSubject::Nofity(){ std::vector<Observer*>::iterator it = m_observers.begin(); while( it != m_observers.end()) { (*it)->Update(); it++; }}
// observer.h#ifndef OBSERVER_H#define OBSERVER_H#include "subject.h"class Subject;class Observer{public: Observer(int state, Subject *sub); virtual void Update() = 0;public: int m_state; Subject *m_sub;};#endif // OBSERVER_H
// observer.cpp#ifndef CONCRETESUBJECT_H#define CONCRETESUBJECT_H#include "subject.h"class ConcreteSubject : public Subject{public: ConcreteSubject(); virtual void Attach(Observer * observer); virtual void Nofity();};#endif // CONCRETESUBJECT_H
// concreteobserver.h#ifndef CONCRETEOBSERVER_H#define CONCRETEOBSERVER_H#include "observer.h"class ConcreteObserver : public Observer{public: ConcreteObserver(int state, Subject *sub); virtual void Update();};#endif // CONCRETEOBSERVER_H
// concreteobserver.cpp#include "concreteobserver.h"#include <iostream>ConcreteObserver::ConcreteObserver(int state, Subject *sub) : Observer(state, sub){}void ConcreteObserver::Update(){ m_state = m_sub->m_message + 10000; std::cout << m_sub->m_message << ":::" << m_state << std::endl;}
客户端:
// main.cpp#include <iostream>#include "subject.h"#include "observer.h"#include "concreteobserver.h"#include "concretesubject.h"using namespace std;int main(int argc, char *argv[]){ Subject *sub = new ConcreteSubject(); Observer *observer = new ConcreteObserver(0, sub); sub->Attach(observer); sub->m_message = 2; sub->Nofity(); return 0;}
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 用素质去鼓励,用体制去保障,用监督去落实,用行动去反馈
- iOS项目分析及优化
- android--关于内部存储、外部存储以及存储路径
- 里氏替换原则 转1
- 一句话说明
- 设计模式-观察者模式
- svn项目突然没有了svn怎么办
- 安装PHP yii2框架(PHP7.0+mysql+nginx+Ubuntu16.04)
- NPOI 设置EXCEL单元格格式为 数值
- (3)线性表:顺序表
- RecylerView---代替ListView,GridView和瀑布流的新控件
- Netty框架的学习经历初级篇---helloworld
- 工程师成长之路:工作1-3年工程师如何突破瓶颈期?
- SVN客户端工具Cornerstone—注意事项