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

苏州做网站的公司哪家好四川省住房与建设厅网站首页

苏州做网站的公司哪家好,四川省住房与建设厅网站首页,信用中国网站建设,网站拒绝被百度收录本文参考:观察者模式 - 摩根斯 | 爱编程的大丙 观察者模式允许我们定义一种订阅机制,可在对象事件发生时通知所有的观察者对象,使它们能够自动更新。观察者模式还有另外一个名字叫做“发布-订阅”模式。 发布者: 添加订阅者&…

  本文参考:观察者模式 - 摩根斯 | 爱编程的大丙

观察者模式允许我们定义一种订阅机制,可在对象事件发生时通知所有的观察者对象,使它们能够自动更新。观察者模式还有另外一个名字叫做“发布-订阅”模式。

发布者:

添加订阅者,将所有的订阅者存储起来
删除订阅者,将其从订阅者列表中删除
将消息发送给订阅者(发通知)

下面举一个生动的例子:

NewsAgency是一个抽象类,表示发布者,其派生类为 Morgans和Gossip,代表不同的两个报社

NewAgency.h

#pragma once
#include <string>
#include <list>using namespace std;//声明订阅者类
class Observer;class NewsAgency
{
public:void attach(Observer* ob);  //添加订阅者void deatch(Observer* ob);  //删除订阅者virtual void notify(string msg) = 0;  //通知list中的所有订阅者virtual ~NewsAgency() {};   //析构protected:list<Observer*> m_list;   //存储订阅者对象
};class Morgans :public NewsAgency
{
public:void notify(string msg) override;
};class Gossip :public NewsAgency
{
public:void notify(string msg) override;
};

 在NewsAgency.cpp,重写子类的虚函数。

#include "NewsAgency.h"
#include "Observer.h"
#include <iostream>void NewsAgency::attach(Observer* ob)
{m_list.push_back(ob);
}void NewsAgency::deatch(Observer* ob)
{m_list.remove(ob);
}void Morgans::notify(string msg)
{cout << "摩根斯新闻社报纸的订阅者一共有" << m_list.size()  << endl;for (const auto& item : m_list){item->update(msg);	// 订阅者类的定义在下面}
}void Gossip::notify(string msg)
{cout << "八卦新闻社报纸的订阅者一共有 " << m_list.size() << endl;for (const auto& item : m_list){item->update(msg);}}

订阅者(也可称为观察者):

 Observer.h

首先给所有的观察者定义一个抽象的基类。

然后子类在各自的类中分别重写了update()这个状态更新函数

#pragma once
#include <string>
#include <iostream>
#include "NewsAgency.h"//抽象的订阅者类
class Observer
{
public://需要通过构造函数给观察者类提供一个信息的发布者//通过发布者对象将观察者对象存储了起来,这样就可以收到发布者推送的消息了。Observer(string name, NewsAgency* news):m_name(name), m_news(news){m_news->attach(this);}//观察者取消订阅,取消之后将不再接收订阅消息。void unsubscribe(){m_news->deatch(this);}//观察者得到最新消息之后,用于更新自己当前的状态。virtual void update(string msg) = 0;virtual ~Observer() {};protected:string m_name;NewsAgency* m_news;
};class Dragon :public Observer
{
public:using Observer::Observer;void update(string msg) override{cout<< "路飞的老爸革命军龙收到消息: " << msg << endl;}
};class Shanks : public Observer
{
public:using Observer::Observer;void update(string msg) override{cout << "路飞的引路人红发香克斯收到消息: " << msg << endl;}
};class Bartolomeo : public Observer
{
public:using Observer::Observer;void update(string msg) override{cout << "路飞的头号粉丝巴托洛米奥收到消息: " << msg << endl;}
};

main函数:

#include <iostream>
#include "NewsAgency.h"
#include "Observer.h"using namespace std;int main()
{Morgans* ms = new Morgans;Gossip* gossip = new Gossip;Dragon* dragon = new Dragon("蒙奇·D·龙", ms);Shanks* shanks = new Shanks("香克斯", ms);Bartolomeo* barto = new Bartolomeo("巴托洛米奥", gossip);ms->notify("蒙奇·D·路飞成为新世界的新的四皇之一, 赏金30亿贝里!!!");cout << "======================================" << endl;gossip->notify("女帝汉库克想要嫁给路飞, 给路飞生猴子, 哈哈哈...");delete ms;delete gossip;delete dragon;delete shanks;delete barto;}

最后总结一下观察者模式的应用场景:
当一个对象的状态发生变化,并且需要改变其它对象的时候;或者当应用中一些对象必须观察其它对象的时候可以使用观察者模式。

http://www.yayakq.cn/news/394289/

相关文章:

  • 做图网站有哪些东西网站前端建设需要学会什么
  • 上海网站建设免网站如何做长尾词排名
  • 农家乐网站 建设yy大杂烩
  • 找事做的网站网站建设的技术支持论文
  • ppt要怎么做网站一个考试网站怎么做
  • 网站 建设运行情况报告网站设计公司推荐奇点网络
  • 茶楼网站源码企业网站建设与推广多少钱
  • 可信网站认证必需做吧网站部署环境
  • 网站开发制作计算器百度提交网站的入口地址
  • 惠州建设企业网站电商网站设计
  • 图书馆网站建设策划设计师网络接单
  • 阿里云怎么上传网站外包平台都有哪些
  • 中企动力网站案例天津平台网站建设设计
  • 网站建设新发展辽宁城乡建设部网站
  • 潍坊网站制作保定公司电话无货源电商选品软件
  • 中国古风网站模板兰州网站设计有限公司
  • django 做网站南京seo公司哪家好
  • 做平面的就一定要做网站吗网站设计的公司报价
  • 电影网站权重怎么做百度seo发帖推广
  • 百度网站模板免费下载福建城乡建设部网站首页
  • 焦作网站建设公司哪家好各自的特点是什么
  • 网站开发国内外研究背景如何做网站泛目录解析
  • 网站营销推广策划书建立网站的风险
  • 承接各类网站建设wordpress修改首页文章样式
  • 蓝色管理系统网站模版昆明做网站的公司有哪些
  • 美食网站开发现状espcms易思企业网站管理系统
  • 360浏览器直接进入网站温州市建筑业联合会
  • 国外metro风格网站模板网站服务内容有哪些
  • 中山营销型网站设计网站建设域名的选取有讲究
  • 做网站是做完给钱还是指数运算公式大全