Headfirst设计模式的C++实现——观察者模式(Observer)
WeatherData.h
#ifndef WEATHERDATA_H_INCLUDED
#define WEATHERDATA_H_INCLUDED #include <set>
#include "Display.h" class WeatherData
{
public:
void measurementsChanged();
void registerObserver( Display *p_display );
void removeObserver( Display *p_display ); private:
int getTemperature() { return ; }
int getHumidity() { return ; }
int getPressure() { return ; } std::set<Display *> m_p_displays;
}; #endif // WEATHERDATA_H_INCLUDED
WeatherData.cpp
#include "WeatherData.h" void WeatherData::measurementsChanged()
{
for ( std::set<Display *>::iterator it = m_p_displays.begin(); it != m_p_displays.end(); it++ )
{
(*it)->update( getTemperature(), getHumidity(), getPressure() );
}
} void WeatherData::registerObserver( Display *p_display )
{
m_p_displays.insert( p_display );
} void WeatherData::removeObserver( Display *p_display )
{
m_p_displays.erase( p_display );
}
Display.h
#ifndef DISPLAY_H_INCLUDED
#define DISPLAY_H_INCLUDED class Display
{
public:
virtual void update( int temp, int humidity, int pressure ) = ;
}; #endif // DISPLAY_H_INCLUDED
CurrentConditionsDisplay.h
#ifndef CURRENTCONDITIONSDISPLAY_H_INCLUDED
#define CURRENTCONDITIONSDISPLAY_H_INCLUDED #include <iostream>
#include "Display.h" class CurrentConditionsDisplay : public Display
{
public:
void update( int temp, int humidity, int pressure ) { std::cout << "CurrentConditionsDisplay " << temp << "-" << humidity << "-" << pressure << std::endl; }
}; #endif // CURRENTCONDITIONSDISPLAY_H_INCLUDED
StatisticsDisplay.h
#ifndef STATISTICSDISPLAY_H_INCLUDED
#define STATISTICSDISPLAY_H_INCLUDED #include <iostream>
#include "Display.h" class StatisticsDisplay : public Display
{
public:
void update( int temp, int humidity, int pressure ) { std::cout << "StatisticsDisplay " << temp << "-" << humidity << "-" << pressure << std::endl; }
}; #endif // STATISTICSDISPLAY_H_INCLUDED
ForcastDisplay.h
#ifndef FORCASTDISPLAY_H_INCLUDED
#define FORCASTDISPLAY_H_INCLUDED #include <iostream>
#include "Display.h" class ForcastDisplay : public Display
{
public:
void update( int temp, int humidity, int pressure ) { std::cout << "ForcastDisplay " << temp << "-" << humidity << "-" << pressure << std::endl; }
}; #endif // FORCASTDISPLAY_H_INCLUDED
main.cpp
#include "WeatherData.h"
#include "CurrentConditionsDisplay.h"
#include "StatisticsDisplay.h"
#include "ForcastDisplay.h" int main()
{
WeatherData weather_data; CurrentConditionsDisplay current_conditions_display;
StatisticsDisplay statistics_display;
ForcastDisplay forcast_display; weather_data.registerObserver( ¤t_conditions_display );
weather_data.registerObserver( &statistics_display );
weather_data.registerObserver( &forcast_display ); weather_data.measurementsChanged(); weather_data.removeObserver( &statistics_display ); weather_data.measurementsChanged(); return ;
}
Headfirst设计模式的C++实现——观察者模式(Observer)的更多相关文章
- HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern)
观察者模式:定义了对象之间一对多的依赖关系,这样一来,当一个对象的状态发生改变时,它的依赖者将会受到通知并且自动更新. 有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事,对象甚至在运行时可以 ...
- headfirst设计模式(2)—观察者模式
定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察 ...
- [Android&Java]浅谈设计模式-代码篇:观察者模式Observer
观察者,就如同一个人,对非常多东西都感兴趣,就好像音乐.电子产品.Game.股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们.在代码中.我们也有这种一种方式来设计一些好玩的思想来.今天就写个 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport[转]
1 2{<HeadFirst设计模式>之观察者模式 } 3{ 主题与观察者 } 4{ 编译工具 :Delphi7.0 ...
- 【HeadFirst 设计模式总结】2 观察者模式
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.我们需要理解报社.订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送 ...
- 设计模式之十:观察者模式(Observer)
观察者模式: 在对象之间定义了一种一对多的依赖关系.当一个对象改变它的状态时,全部依赖它的对象会自己主动接收通知并更新自己的状态. Define a one-to-many dependency be ...
- HeadFirst设计模式读书笔记--目录
HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
随机推荐
- 浏览器使用ActiveX控件
在IE中使用ActiveX控件,需要使用HTML中的标志是<OBJECT>,该标记几个重要的参数特性有:1.ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的入口.2.CLA ...
- Linux内存管理原理 与文件读写 图 相当详细
http://www.cnblogs.com/zhaoyl/p/3695517.html http://www.cnblogs.com/huxiao-tee/p/4657851.html#_label ...
- 一款基于css3的3D图片翻页切换特效
今天给大家分享一款基于css3的3D图片翻页切换特效.单击图片下方的滑块会切换上方的图片.动起你的鼠标试试吧,效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id= ...
- [JavaEE] SSH框架笔记_eclipse搭建SSH框架详解
SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程. 第一步:准备工作. 下载好eclipse,Struts2,Spring,Hibe ...
- 【阿里云产品公测】云引擎ACE -discuz安装
作者:阿里云用户云想未来 谢谢支持.为什么写的比较简单就是为方便新手谁想要很麻烦?亲测按这个教程可以安装成功!时间紧迫不发图片了纯原创 排版您请谅解 进入创建新应用的信息填写界面,此处需要填写一个赠送 ...
- 通用权限管理系统接口文档V4.2 版本之消息接口介绍
通用权限管理系统提供的消息接口可实现消息获取,消息发送,底层使用Redis对消息进行缓存,解决消息的并发请求对数据库的压力. 前端可以通过客户端轮询来获取最新消息,前端效果截图如下:
- Oracle基础 exp/imp和expdp/impdp的区别:
一.exp/imp和expdp/impdp在功能上的区别: 1.把用户usera的对象导入到userb emp/imp用法: formuser=usera touser=userb; empdp/im ...
- Oracle基础 (十一)字符串函数
一.字符串函数 LENGTH(char1,char2) SELECT LENGTH('abc def gh') FROM dual; --获取字符串的长度,包含空格 结果: CONCAT(char1, ...
- Oracle 常用命令大全
一.如何有效地利用数据字典 ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图.数据字典名称是大写的英文字符. 数 ...
- oracle使用pfile或者spfile启动
oracle 11G使用pfile启动数据库 startup pfile='pfile参数文件路径' oracle 11G使用spfile启动数据库 spfile=Windows缺省目录 %OR ...