观察者模式
2014-04-27 17:32
302 查看
观察者模式的特点:
定义对象间的一种一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
更详细一些的说明可以参考以下博文:
http://www.cnblogs.com/gaochundong/p/design_pattern_observer.html http://blog.csdn.net/u013757555/article/details/23241481
自己也实现一个。主要包括2块:观察者和被观察者的基类、观察者的实现类。
//Observer.h
#ifndef OBSERVER_PATTERN_H
#define OBSERVER_PATTERN_H
#pragma once
#include <string>
#include <set>
class CObserver
{
public:
CObserver(void){}
virtual ~CObserver(void){}
virtual void Update(const std::string & observable, const std::string & doSomething)=0;
};
class CObservable
{
public:
CObservable(void){}
virtual ~CObservable(void){}
virtual bool AddObserver(CObserver & o);
virtual bool RmvObserver(CObserver & o);
virtual void SetName(const std::string & strName){m_strName = strName;}
virtual std::string GetName(void){return m_strName;}
virtual void DoSomething(const std::string & strState);
protected:
std::set<CObserver*> m_setObserver;
std::string m_strState;
std::string m_strName;
virtual void NotifyObservers(void);
};
#endif
调用示例
// main.cpp
#include "stdafx.h"
#include "ObserverImpl.h"
int _tmain(int argc, _TCHAR* argv[])
{
CObserverImpl observerA;
CObservable o;
o.SetName("被观察者");
o.AddObserver(observerA);
o.DoSomething("Hello world.");
system("pause");
return 0;
}
定义对象间的一种一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
更详细一些的说明可以参考以下博文:
http://www.cnblogs.com/gaochundong/p/design_pattern_observer.html http://blog.csdn.net/u013757555/article/details/23241481
自己也实现一个。主要包括2块:观察者和被观察者的基类、观察者的实现类。
//Observer.h
#ifndef OBSERVER_PATTERN_H
#define OBSERVER_PATTERN_H
#pragma once
#include <string>
#include <set>
class CObserver
{
public:
CObserver(void){}
virtual ~CObserver(void){}
virtual void Update(const std::string & observable, const std::string & doSomething)=0;
};
class CObservable
{
public:
CObservable(void){}
virtual ~CObservable(void){}
virtual bool AddObserver(CObserver & o);
virtual bool RmvObserver(CObserver & o);
virtual void SetName(const std::string & strName){m_strName = strName;}
virtual std::string GetName(void){return m_strName;}
virtual void DoSomething(const std::string & strState);
protected:
std::set<CObserver*> m_setObserver;
std::string m_strState;
std::string m_strName;
virtual void NotifyObservers(void);
};
#endif
//Observer.cpp #include "Observer.h" bool CObservable::AddObserver(CObserver & o) { m_setObserver.insert(&o); return true; } void CObservable::NotifyObservers(void) { std::set<CObserver*>::iterator it = m_setObserver.begin(); for (; it != m_setObserver.end(); ++it) { (*it)->Update(m_strName,m_strState); } } bool CObservable::RmvObserver(CObserver & o) { std::set<CObserver*>::iterator it = m_setObserver.find(&o); if (it == m_setObserver.end()) return false; m_setObserver.erase(it); return true; } void CObservable::DoSomething(const std::string & strState) { m_strState = strState; NotifyObservers(); }
//ObserverImpl.h #ifndef OBSERVER_PATTERN_IMPL_H #define OBSERVER_PATTERN_IMPL_H #pragma once #include "observer.h" #include <iostream> class CObserverImpl : public CObserver { public: CObserverImpl(void) { } virtual ~CObserverImpl(void) { } virtual void Update(const std::string & observable, const std::string & doSomething) { std::cout<< observable << " " << doSomething << std::endl; } }; #endif
调用示例
// main.cpp
#include "stdafx.h"
#include "ObserverImpl.h"
int _tmain(int argc, _TCHAR* argv[])
{
CObserverImpl observerA;
CObservable o;
o.SetName("被观察者");
o.AddObserver(observerA);
o.DoSomething("Hello world.");
system("pause");
return 0;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型