Test02.cpp:Defines the entry point for the console application.
//
Design Pattern 2nd Observer pattern
#include "stdafx.h"
#include <vector>
using namespace Std;
Class Observer;
Class subject{
Public
virtual void Registerobjecet (observer* o) {};
void Removeobserver (Observer o);
void Notifyobservers ();
};
Class Observer
{
Public
virtual void update (float temp,float humidity,float pressure) {};
BOOL operator = = (Const Observer * d)//heavy Load = =
{
return this = = D;
}
};
Class displayelement{
Public
void display ();
};
Class Weatherdata:public Subject
{
Private
Vector<observer*> observers;
Vector<observer*>::iterator ITER;
float temperature;
float humidity;
float pressure;
Public
Weatherdata () {
}
Public
void Registerobjecet (observer* o)
{
Observers.push_back (o);
}
void Removeobserver (Observer o)
{
for (iter = Observers.begin (); ITER! = Observers.end (); ++iter)
{
if (*iter = = &o)
{
Observers.erase (ITER);
Break
}
}
}
void Notifyobservers ()
{
for (int i = 0; i < observers.size (); i++)
{
observer* Observer = observers[i];
Observer->update (temperature,humidity,pressure);
}
}
void Measurementschanged ()
{
Notifyobservers ();
}
void Setmeasurements (float temperature,float humidity,float pressure)
{
This->temperature = temperature;
this->humidity = humidity;
This->pressure = pressure;
Measurementschanged ();
}
};
Class Currentconditionsdisplay:public Observer,public Displayelement
{
Public
float temperature;
float humidity;
subject* Weatherdata;
Public
Currentconditionsdisplay (subject* in_weatherdata)
{
This->weatherdata = In_weatherdata;
In_weatherdata->registerobjecet (/* (observer*) */this);
}
void update (float temperature,float humidity,float pressure)
{
This->temperature = temperature;
this->humidity = humidity;
Display ();
}
void display ()
{
printf ("Current conditions:%f f degrees and%f percent humidity\n", temperature,humidity);
}
};
Weatherstation
int _tmain (int argc, _tchar* argv[])
{
weatherdata* weatherdata = new Weatherdata;
Currentconditionsdisplay Currentdisplay (Weatherdata);
Weatherdata->setmeasurements (80,65,30.4f);
Weatherdata->setmeasurements (82,70,29.2f);
Weatherdata->setmeasurements (78,90,29.2f);
return 0;
}
Introduction to design patterns, observer patterns, C + + code implementation