当前位置: 首页 > news >正文

联系我们_网站制作公司/推广引流工具

联系我们_网站制作公司,推广引流工具,农村建房设计效果图,一般网站可以自己做商城吗观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子&…

       观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些订阅的读者就会收到通知,然后进行相应的动作,比如去看文章,或者收藏起来。博主与读者之间存在种一对多的依赖关系。下面给出相应的UML图设计。


       可以看到博客类中有一个观察者链表(即订阅者),当博客的状态发生变化时,通过Notify成员函数通知所有的观察者,告诉他们博客的状态更新了。而观察者通过Update成员函数获取博客的状态信息。代码实现不难,下面给出C++的一种实现。

[cpp] view plaincopy
print?
  1. //观察者  
  2. class Observer    
  3. {  
  4. public:  
  5.     Observer() {}  
  6.     virtual ~Observer() {}  
  7.     virtual void Update() {}   
  8. };  
  9. //博客  
  10. class Blog    
  11. {  
  12. public:  
  13.     Blog() {}  
  14.     virtual ~Blog() {}  
  15.     void Attach(Observer *observer) { m_observers.push_back(observer); }     //添加观察者  
  16.     void Remove(Observer *observer) { m_observers.remove(observer); }        //移除观察者  
  17.     void Notify() //通知观察者  
  18.     {  
  19.         list<Observer*>::iterator iter = m_observers.begin();  
  20.         for(; iter != m_observers.end(); iter++)  
  21.             (*iter)->Update();  
  22.     }  
  23.     virtual void SetStatus(string s) { m_status = s; } //设置状态  
  24.     virtual string GetStatus() { return m_status; }    //获得状态  
  25. private:  
  26.     list<Observer* > m_observers; //观察者链表  
  27. protected:  
  28.     string m_status; //状态  
  29. };  

      以上是观察者和博客的基类,定义了通用接口。博客类主要完成观察者的添加、移除、通知操作,设置和获得状态仅仅是一个默认实现。下面给出它们相应的子类实现。     

[cpp] view plaincopy
print?
  1. //具体博客类  
  2. class BlogCSDN : public Blog  
  3. {  
  4. private:  
  5.     string m_name; //博主名称  
  6. public:  
  7.     BlogCSDN(string name): m_name(name) {}  
  8.     ~BlogCSDN() {}  
  9.     void SetStatus(string s) { m_status = "CSDN通知 : " + m_name + s; } //具体设置状态信息  
  10.     string GetStatus() { return m_status; }  
  11. };  
  12. //具体观察者  
  13. class ObserverBlog : public Observer     
  14. {  
  15. private:  
  16.     string m_name;  //观察者名称  
  17.     Blog *m_blog;   //观察的博客,当然以链表形式更好,就可以观察多个博客  
  18. public:   
  19.     ObserverBlog(string name,Blog *blog): m_name(name), m_blog(blog) {}  
  20.     ~ObserverBlog() {}  
  21.     void Update()  //获得更新状态  
  22.     {   
  23.         string status = m_blog->GetStatus();  
  24.         cout<<m_name<<"-------"<<status<<endl;  
  25.     }  
  26. };  
      客户的使用方式:

[cpp] view plaincopy
print?
  1. //测试案例  
  2. int main()  
  3. {  
  4.     Blog *blog = new BlogCSDN("wuzhekai1985");  
  5.     Observer *observer1 = new ObserverBlog("tutupig", blog);  
  6.     blog->Attach(observer1);  
  7.     blog->SetStatus("发表设计模式C++实现(15)——观察者模式");  
  8.     blog->Notify();  
  9.     delete blog; delete observer1;  
  10.     return 0;  
http://www.lbrq.cn/news/1413757.html

相关文章:

  • 老男孩linux网站/seo网站推广方案策划书
  • 教学网站/seo优化报价公司
  • 做彩票网站需要什么技术/做一个公司网站需要多少钱
  • 建设自己的网站怎么做/公司推广方案
  • 软件网站建设基本流程/百度商家平台登录
  • 易语言和网站做交互/不死鸟分享友情链接
  • 知名的集团门户网站建设企业/全球网站流量排名查询
  • 免费跨境电商网站/营销策略分析
  • 北京市海淀区网站建设/网络销售平台有哪些软件
  • 网站设计文档/百度学术论文查重官网入口
  • wordpress没有样式/广州seo优化推广
  • 西安手机网站建设公司/电商sem是什么意思
  • 做全网影视网站的风险/如何进行搜索引擎的优化
  • 上海最专业的集团网站建设/培训后的收获和感想
  • 做网站的经历/谷歌流量代理代理
  • 研究生网站建设/武汉seo推广
  • 从零开始网站建设/百度一下你就知道 官网
  • 广告网架/seo推广软件
  • 微信公众平台怎么做微网站/sem是什么意思
  • 哪些网站可以接单做/网站统计平台
  • 商业网站的建设流程/市场营销公司排名
  • 网站制作客户寻找/申请域名的方法和流程
  • 网站怎么做seo、/上海服务政策调整
  • 成都哪里有做网站建设的/成都seo网络优化公司
  • 做网站生意不赚钱/网站权重查询工具
  • 年报是否就是在工商网站做的/怎么搭建一个网站
  • 自己在线制作logo免费下载/百度爱采购怎么优化排名
  • 网站建设 php/做网站推广
  • 什么网站可以接模具做/百度竞价入门教程
  • 哈尔滨自助建站系统/百度搜图匹配相似图片
  • 08.常见文本处理工具
  • rust 从入门到精通之变量和常量
  • 从零开始大模型之实现GPT模型
  • Sklearn 机器学习 邮件文本分类 加载邮件数据
  • 小白挑战一周上架元服务——元服务开发06
  • HDFS数据倾斜导致MapReduce作业失败的排查与优化实践