#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的更多相关文章

  1. 观察者模式(一)--《Head First DesignPattern》

    观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并且自动更新. 我们先看下类图: 首先我们自己创建Subject接口,定义了注册观察者,移除观察者和通知 ...

  2. 观察者模式(二)--《Head First DesignPattern》

    我们用Java中自带的观察者模式接口来重写前面的例子. 先看一下类图: 这里用到了一个setChanged函数,它用来标记状态已经改变的事实,好让notifyObservers()知道当它调用时就应该 ...

  3. HeadFirst设计模式之观察者模式

    一.什么是观察者模式 观察者模式定义了一系列对象间一对多的关系,当主题对象的状态发生变化时,会通知所有观察者 二.自定义观察模式 1. 2. package headfirst.designpatte ...

  4. OOP设计模式[JAVA]——02观察者模式

    观察者模式 观察者模式的设计原则 为交互对象之间的松耦合设计而努力,使对象之间的相互依赖降到最低. 观察者模式也是对象行为型模式,其意图为:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时 ...

  5. 设计模式 - 观察者模式(Observer Pattern) 详细说明

    观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  6. 读书笔记之 - javascript 设计模式 - 观察者模式

    在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式是一种管理人与其任务(确切的讲,是对象及其行为和状态之间的关系)之间的关系的得力工具.用javascript的话来讲,这种模式的实 ...

  7. 设计模式 - 观察者模式(Observer Pattern) 详细解释

    观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  8. 观察者模式的程序实例C++

    一.什么是观察者模式 Observer模式也叫观察者模式,是由GoF提出的23种软件设计模式的一种.Observer模式是行为模式之中的一个,它的作用是当一个对象的状态发生变化时,可以自己主动通知其它 ...

  9. headfirst设计模式(2)—观察者模式

    定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察 ...

随机推荐

  1. Java通过ftp上传文件

    首先,pom.xml添加引用 <dependency> <groupId>commons-net</groupId> <artifactId>commo ...

  2. Arduino 数字函数总结

    Arduino 有三个数字函数,分别是:pinMode( ), digitalWrite( ),digitalRead( ).三个函数各有其作用,pinMode( ) 在初始化 setup( )函数中 ...

  3. Django中CBV及其源码解释

    FBV(function base views) 就是在视图里使用函数处理请求. CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的编程语言,如果只 ...

  4. 根据id获取某一类的最大最小值

    ->selectRaw('max(marking_price) as maxPrice, min(marking_price) as minPrice, product_id') ->gr ...

  5. HDu4794 斐波那契循环节

    题意:Arnold变换把矩阵(x,y)变成((x+y)%n,(x+2*y)%n),问最小循环节 题解:仔细算前几项能看出是斐波那契数论modn,然后套个斐波那契循环节板子即可 //#pragma GC ...

  6. 【PowerDesigner】【1】简单介绍

    正文: 创建表格 File→New Model→(Model types; Physical Data Model; Physical Diagram)Model name:名称:DBMS:数据库类型 ...

  7. php7配置多线程

    1.下载pthreads 文件  http://windows.php.net/downloads/pecl/releases/pthreads/3.1.5/ 2.把   pthreadVC2.dll ...

  8. Leetcode 1003. 检查替换后的词是否有效

    1003. 检查替换后的词是否有效  显示英文描述 我的提交返回竞赛   用户通过次数245 用户尝试次数273 通过次数249 提交次数500 题目难度Medium 给定有效字符串 "ab ...

  9. CO15批次确定,标准的太蛋疼了

    1.批次确定的配置,之前有转过,自己也动手配过,可以是可以,但是蛋疼,用户不愿意去弹出的界面选批次...2.因为这边的批次全部是按年月日+流水生成的,所以在批次确定这里就需要按照批次的号来排序选择了 ...

  10. H5新特性实现对class的增删改

    直接撸代码 全靠死记硬背 没什么技术点 HTML部分 <!DOCTYPE html> <html lang="en"> <head> <m ...