观察者模式

xiaoxiao2021-02-28  87

状态监听

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; }
转载请注明原文地址: https://www.6miu.com/read-53817.html

最新回复(0)