//观察者模式
//作者示例:李斯派人观察监视韩非子,并报告给秦始皇。
//我自己修改了一些
//抽象观察者
class Observer {
public:
virtual void Update(string& context){}
};
//被观察者接口
class Observable {
public:
//增加一个观察者
virtual void AddObserver(Observable* obs) {}
virtual void DeleteObserver(Observable* obs){}
virtual void NotifyObservers(string context){}//通知观察者
};
//抽象韩非子这类人的接口
class IHanFeizi {
public:
//抽象一些人基本要做的事情
virtual void HaveBreakfast()= 0 ;
virtual void HaveFun()= 0 ;
};
//优化 被观察的韩非子这类人
class HanFeizi:public Observable, public IHanFeizi {
private:
Observer* m_pLisi;
public:
HanFeizi(Observer* p): m_pLisi(p) {}
void HaveBreakfast() {
NotifyObservers("韩非子在吃饭");
}
void HaveFun() {
NotifyObservers("韩非子在娱乐");
}
void NotifyObservers(string context) {
m_pLisi->Update(context);
}
};
//实现观察者
class LiSi : public Observer {
private:
void ReportToQinShiHuang(string report) {
cout <<report;
}
public:
void Update(string& context) {
cout <<"李斯汇报"<<endl;
ReportToQinShiHuang(context);
cout << endl;
}
};
class Client {
public:
static void main() {
Observer* p_obs = new LiSi;
HanFeizi* p_han = new HanFeizi(p_obs);
p_han->HaveBreakfast();
}
};
//这个模式感觉主要还是触发的形式,韩非子的行动必须触发汇报
//触发的话,感觉还是c++的函数指针要好点,windows的回调函数便是那样的
设计模式观后(c++还原之十九 观察者模式)
最新推荐文章于 2023-12-23 12:40:13 发布