#pragma once
class IObserver
{
public:
virtual ~IObserver() {}
virtual void Update(float tmp, float humidity, float pressure) = 0;
};
#pragma once
#include "IObserver.h"
class Observer :
public IObserver
{
public:
Observer();
virtual ~Observer();
virtual void Update(float tmp, float humidity, float pressure);
};
#include "Observer.h"
Observer::Observer()
{
}
Observer::~Observer()
{
}
void Observer::Update(float tmp, float humidity, float pressure)
{
}
#pragma once
#include "IObserver.h"
#include <list>
using namespace std;
class ISubject
{
public:
virtual ~ISubject() {}
virtual void Attach(IObserver* ob) = 0;
virtual void Detach(IObserver* ob) = 0;
virtual void Notify() = 0;
protected:
list<IObserver* > m_Observers;
};
#pragma once
#include "ISubject.h"
class WeatherData
: public ISubject
{
public:
WeatherData();
~WeatherData();
void GetTemperature();
void GetPressure();
void Attach(IObserver* ob);
void Detach(IObserver* ob);
void setMeasurements(float temprature, float humidity, float pressure);
void Notify();
private:
float temprature;
float humidity;
float pressure;
};
#include "WeatherData.h"
#include <QDeBug>
WeatherData::WeatherData()
{
}
WeatherData::~WeatherData()
{
}
void WeatherData::GetTemperature()
{
qDebug() << "Current Temperature: 37.5" << endl;
}
void WeatherData::GetPressure()
{
qDebug() << "Current Pressure: 12.5" << endl;
}
void WeatherData::Attach(IObserver * ob)
{
m_Observers.push_back(ob);
}
void WeatherData::Detach(IObserver * ob)
{
list<IObserver*>::iterator it = m_Observers.begin();
for (; it != m_Observers.end(); ++it)
{
if (ob == *it)
{
m_Observers.remove(ob);
}
}
}
void WeatherData::setMeasurements(float temprature, float humidity, float pressure)
{
this->temprature = temprature;
this->humidity = humidity;
this->pressure = pressure;
}
void WeatherData::Notify()
{
list<IObserver*>::iterator it = m_Observers.begin();
for (; it != m_Observers.end(); ++it)
{
(*it)->Update(temprature, humidity, pressure);
}
}
#pragma once
#include "Observer.h"
class DispData :
public Observer
{
public:
DispData();
~DispData();
void Update(float tmp, float humidity, float pressure);
};
#include "DispData.h"
DispData::DispData()
{
}
DispData::~DispData()
{
}
void DispData::Update(float tmp, float humidity, float pressure)
{
int a = 3;
}
//观察者模式
#include "DispData.h"
#include "WeatherData.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
WeatherData wa;
DispData* dd= new DispData;
wa.Attach(dd);
// wa.GetTemperature();
wa.setMeasurements(1.1, 2.2, 3.3);
wa.Notify();
return a.exec();
}