欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > asp.net >内容正文

asp.net

c/cpp / 设计模式 / 观察者模式 -ag凯发k8国际

发布时间:2024/10/14 asp.net 22 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 c/cpp / 设计模式 / 观察者模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
--------------------------------------------- -- 时间:2019-03-22 -- 创建人:ruo_xiao -- 邮箱:xclsoftware@163.com ---------------------------------------------

一、解释

1、结构:分为目标和观察者。

2、功能:当目标更新时,该模式可以将该更新内容发布给所有的该目标的观察者。

3、实际上,目标通过抽象类得到观察者的接口,然后在其内建立观察者的链表,当发布时直接按照同一个接口(面向接口编程)向所有的观察者的更新。

二、代码

#include #include using namespace std;// 观察者……抽象类 class observe { public:virtual void update(int i) = 0;virtual void attach() = 0;virtual void detach() = 0; };// 目标……抽象类 class subject { public:virtual void attach(observe *p) = 0;virtual void detach(observe *p) = 0;virtual void notify() = 0; };// 建立3个观察者、1个目标 class observe_1 : public observe { public:observe_1(subject *p){m_psubject = p;} public:void attach(){m_psubject->attach(this);}void detach(){m_psubject->detach(this);}void update(int i){cout<<"i am observe 1,showing "<< i <attach(this);}void detach(){m_psubject->detach(this);}void update(int i){cout<<"i am observe 2,showing "<< i <attach(this);}void detach(){m_psubject->detach(this);}void update(int i){cout<<"i am observe 3,showing "<< i <::iterator it = pobserverlist.begin();for (;it!=pobserverlist.end(); it){(*it)->update(istate_all);}}void setstate(int istate){istate_all = istate;} private:list pobserverlist;int istate_all; };int main() {// create subjectsubject_all *psubject = new subject_all();// create observerobserve_1 *pobserver1 = new observe_1(psubject);observe_2 *pobserver2 = new observe_2(psubject);observe_3 *pobserver3 = new observe_3(psubject);// change the statepsubject->setstate(2);// register the observerpobserver1->attach();pobserver2->attach();pobserver3->attach();psubject->notify();// unregister the observerpobserver3->detach();psubject->setstate(3);psubject->notify();delete pobserver1;delete pobserver2;delete pobserver3;delete psubject;cin.get(); }

结果:

(saw:game over!)

总结

以上是ag凯发k8国际为你收集整理的c/cpp / 设计模式 / 观察者模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图