Example 18-1: Observer Implemented
TOC
Customer
TOPCustomer.h
#pragma once #includeCustomer.cpp#include #include "Observer.h" using namespace std; class Customer { public: Customer(void); void attach( Observer *myObserver); void detach( Observer *myObserver); string* getState(); void notifyObs(); private: vector myObs; public: ~Customer(void); };
#include "Customer.h"
Customer::Customer(void)
{
}
Customer::~Customer(void)
{
}
void Customer::attach( Observer *myObserver)
{
myObs.push_back( myObserver);
}
void Customer::detach( Observer *myObserver)
{
for (int i= 0; i< myObs.size(); i++)
{
if (myObs[i]== myObserver)
{
myObs.erase(myObs.begin()+i);
return;
}
}
}
void Customer::notifyObs()
{
// set arg to something that helps
// tell the Observers what happened
for (int i= 0; i< myObs.size(); i++)
{
myObs[i]->update(this);
}
}
string* Customer::getState()
{
string *state= new string;
// set state
return 0l;
}
Observer
TOPObserver.h
#pragma once
class Customer;
class Observer
{
public:
Observer(void);
virtual void update( Customer *myCust)= 0;
public:
~Observer(void);
};
Observer.cpp
#include "Observer.h"
Observer::Observer(void)
{
}
Observer::~Observer(void)
{
}
AddrVerification
TOPAddrVerification.h
#pragma once
#include "Observer.h"
#include "Customer.h"
class AddrVerification : public Observer
{
public:
AddrVerification(void);
void update( Customer *myCust);
public:
~AddrVerification(void);
};
AddrVerification.cpp
#include "AddrVerification.h"
AddrVerification::AddrVerification(void)
{
}
AddrVerification::~AddrVerification(void)
{
}
void AddrVerification::update ( Customer *myCust)
{
// do Address verification stuff here
// can get more information about customer
// in question by using myCust
}
WelcomeLetter
TOPWelcomeLetter.h
#pragma once
#include "Observer.h"
#include "Customer.h"
class WelcomeLetter : public Observer
{
public:
WelcomeLetter(void);
void update( Customer *myCust);
public:
~WelcomeLetter(void);
};
WelcomeLetter.cpp
#include "WelcomeLetter.h"
WelcomeLetter::WelcomeLetter(void)
{
}
WelcomeLetter::~WelcomeLetter(void)
{
}
void WelcomeLetter::update( Customer *myCust)
{
// do Welcome Letter stuff
// here can get more
// information about customer
// in question by using myCust
}