:观察者模式--Weather
#ifndef __WEATHER_H__
#define __WEATHER_H__
#include <list>
#include <iostream>
using namespace std; class DisplayElement
{
public:
DisplayElement(){}
virtual ~DisplayElement(){}
virtual void display(){}
};
class Subject; class Observer
{
public:
Observer(){} virtual ~Observer(){} virtual void update(float temp, float humidit, float pressure){} }; class CurrentWeatherDisplay:public Observer, public DisplayElement
{
private:
float temperature;
float humidity;
float pressure;
Subject *weatherData; public:
CurrentWeatherDisplay(Subject *wd); virtual ~CurrentWeatherDisplay(){} virtual void CurrentWeatherDisplay::display()
{
std::cout << "This is Current" << temperature << " " << humidity << " " << pressure << endl;
} virtual void CurrentWeatherDisplay::update(float temp, float hum, float pres)
{
temperature = temp;
humidity = hum;
pressure = pres;
display();
} }; #endif
#ifndef __SUBJECT_H__
#define __SUBJECT_H__
#include <list>
#include <iostream>
#include "Observer.h" using namespace std; class Subject
{
public:
Subject(){} virtual ~Subject(){} virtual void registerObserver(Observer *obs){} virtual void removeObserver(Observer *obs){} virtual void notifyObserver(){}
}; class WeatherData : public Subject
{
private:
std::list<Observer*>observer;
float temperature;
float humidity;
float pressure;
public:
WeatherData(){}
virtual ~WeatherData(){} virtual void registerObserver(Observer *obs){ observer.push_back(obs); } virtual void removeObserver(Observer *obs) { observer.remove(obs);} virtual void notifyObserver()
{
std:list<Observer *>::iterator it = observer.begin();
for (; it != observer.end(); it++)
{
(*it)->update(temperature, humidity, pressure);
}
} void measurementsChanged(){ notifyObserver();} void setMeasurements(float temp, float hum, float pre)
{
temperature = temp;
humidity = hum;
pressure = pre;
measurementsChanged();
}
}; CurrentWeatherDisplay::CurrentWeatherDisplay(Subject *wd)
{
weatherData = wd;
weatherData->registerObserver(this);
} #endif
#include <iostream>
#include "Subject.h"
using namespace std;
int main()
{
WeatherData *wd = new WeatherData();
CurrentWeatherDisplay * cu = new CurrentWeatherDisplay(wd);
wd->setMeasurements(10, 20, 30);
wd->setMeasurements(20, 40, 80);
wd->setMeasurements(100, 200, 300);
return 0;
}
:观察者模式--Weather的更多相关文章
- 观察者模式(一)--《Head First DesignPattern》
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并且自动更新. 我们先看下类图: 首先我们自己创建Subject接口,定义了注册观察者,移除观察者和通知 ...
- 观察者模式(二)--《Head First DesignPattern》
我们用Java中自带的观察者模式接口来重写前面的例子. 先看一下类图: 这里用到了一个setChanged函数,它用来标记状态已经改变的事实,好让notifyObservers()知道当它调用时就应该 ...
- HeadFirst设计模式之观察者模式
一.什么是观察者模式 观察者模式定义了一系列对象间一对多的关系,当主题对象的状态发生变化时,会通知所有观察者 二.自定义观察模式 1. 2. package headfirst.designpatte ...
- OOP设计模式[JAVA]——02观察者模式
观察者模式 观察者模式的设计原则 为交互对象之间的松耦合设计而努力,使对象之间的相互依赖降到最低. 观察者模式也是对象行为型模式,其意图为:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时 ...
- 设计模式 - 观察者模式(Observer Pattern) 详细说明
观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 读书笔记之 - javascript 设计模式 - 观察者模式
在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式是一种管理人与其任务(确切的讲,是对象及其行为和状态之间的关系)之间的关系的得力工具.用javascript的话来讲,这种模式的实 ...
- 设计模式 - 观察者模式(Observer Pattern) 详细解释
观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 观察者模式的程序实例C++
一.什么是观察者模式 Observer模式也叫观察者模式,是由GoF提出的23种软件设计模式的一种.Observer模式是行为模式之中的一个,它的作用是当一个对象的状态发生变化时,可以自己主动通知其它 ...
- headfirst设计模式(2)—观察者模式
定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察 ...
随机推荐
- Run-time code to create charts:
tChart1.Series.Clear(); tChart1.Series.Add(new Steema.TeeChart.Styles.Bar());tChart1.Series[0].Clear ...
- English Voice of << Last Christmas >>
Last Christmas填 词:乔治·迈克尔谱 曲:乔治·迈克尔编 曲:乔治·迈克尔歌词:Last Christmas I gave you my heart去年的圣诞节,我把心给了你But th ...
- django笔记 - 建站
1,建站步骤:1)django-admin.exe startproject mysite 创建完后的目录结构: - mysite # 对整个程序进行配置 - init - settings # 配置 ...
- pandas更换index,column名称
1)仅换掉index名称 df.index = list 2)调整index时,后面的项目也要跟着调整: df.reindex(list) 注意如果list中出现了df中没有的index,后面的项目会 ...
- css对于文字过长加省略号
overflow: hiddentext-overflow: ellipsiswhite-space: nowrap
- android -------- Data Binding的使用(一)
Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用 面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助 描述: Data ...
- VS Code设置中文插件
Vscode是一款开源的跨平台编辑器.默认情况下,vscode使用的语言为英文(en) 1)打开vscode工具: 2)使用快捷键组合[Ctrl+Shift+p],在搜索框中输入“configure ...
- 1.numpy_overview
官网文档:https://www.numpy.org.cn/ Numpy 简介 导入numpy Numpy是Python的一个很重要的第三方库,很多其他科学计算的第三方库都是以Numpy为基础建立的. ...
- React文档(一)安装
React是一个灵活的可以用于各种不同项目的框架,你可以用它来写新应用,你也可以逐步将它引进已有的代码库而不用重写整个项目. 试用React 如果你想玩一玩React,那么就去CodePen上试一试. ...
- python-Tornado 框架
概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...