状态监听
Observer.hpp
#ifndef OBSERVER_HPP_
#define OBSERVER_HPP_
#include <List>
class Observer{
public:
virtual void update(int state)=0;
};
class ContreteObserver1 :public Observer{
public:
int observerStage;
void update(int state);
};
class ContreteObserver2 :public Observer{
public:
int observerStage;
void update(int state);
};
class Subject{
public:
// list<Observer*> m_lst;
Observer *observer;
virtual void attach(Observer *observer)=0;
virtual void detach(Observer *observer)=0;
virtual void notify()=0;
};
class ContreteSubject :public Subject{
public:
int subjectStage;
void setState(int state);
void getState();
void attach(Observer *observer);
void detach(Observer *observer);
void notify();
};
#endif /* OBSERVER_HPP_ */
Observer.cpp
#include <iostream>
#include "Observer.hpp"
using namespace std;
void ContreteObserver1::update(int state){
this->observerStage=state;
cout << " ContreteObserver1::observerStage::::"<< this->observerStage << endl;
}
void ContreteObserver2::update(int state){
this->observerStage=state;
cout << " ContreteObserver2::observerStage::::"<<this->observerStage<< endl;
}
void ContreteSubject::getState(){
cout << " ContreteSubject::getState::::" <<this->subjectStage<< endl;
}
void ContreteSubject::setState(int state){
this->subjectStage=state;
cout << " ContreteSubject::getState::::"<<this->subjectStage<< endl;
}
void ContreteSubject::attach(Observer *observer){
this->observer=observer;
}
void ContreteSubject::detach(Observer *observer){
this->observer=NULL;
}
void ContreteSubject::notify(){
this->observer->update(this->subjectStage);
}
test.cpp
#include <iostream>
#include "Decorator.hpp"
#include "factoryMethod.hpp"
#include "Observer.hpp"
using namespace std;
int main() {
Observer *observer1=new ContreteObserver1();
Observer *observer2=new ContreteObserver2();
ContreteSubject* suject=new ContreteSubject();
suject->setState(6);
suject->attach(observer1);
suject->notify();
suject->setState(6);
suject->attach(observer2);
suject->notify();
//suject->setState();
//suject->detach(observer1);
//suject->getState();
return 0;
}