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

自己开通一个网站需要多少钱seo人工智能

自己开通一个网站需要多少钱,seo人工智能,电商思维做招聘网站,网页模板下载大全目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式(Observer Pattern),也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系, …

目录

模式简介

介绍

优点

缺点

代码实现

场景说明

实现代码

运行结果


模式简介

观察者模式(Observer Pattern,也叫我们熟知的发布-订阅模式。
它是一种行为型模式。

介绍

观察者模式主要关注的是对象的一对多的关系,
也就是多个对象依赖于一个对象,当该对象的状态发生改变时,其他对象都能够收到相应的通知

意图:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:
一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
如何解决:
使用面向对象技术,可以将这种关系弱化。

优点

  1. 观察者和被观察者是抽象耦合的;
  2. 建立了一套触发机制。

缺点

  1. 如果一个被观察者对象有很多的直接和间接的观察者的话,通知所有的观察者需要花费很长的时间
  2. 如果在观察者和被观察者目标之间有循环依赖的话,观察目标会触发他们之间的循环调用,可能会导致系统崩溃;
  3. 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅是知道观察目标发生了变化。

代码实现

场景说明

我们现在有三个观察者三种消息,这三个观察者分别对不同的消息感兴趣

我们实现的话,可以简单的设置三个观察者,一个主题类(被观察者)。
这三个观察者可以设置自己喜欢的、感兴趣的消息类型(1、2、3)。
他们处理收到的消息就是打印一下自己收到了什么消息。
具体实现如下

实现代码

/*observer1 observer2 observer3Subject (主题)主题更改,应该及时通知相应的观察者,去处理相应的事件
*/
class Observer // 观察者抽象类
{
public://处理消息的接口virtual void handle(int msgid) = 0;
};//第一个观察者实例
class Observer1 : public Observer
{
public:void handle(int msgid){switch (msgid){case 1:cout << "Observer1 recv 1 msg" << endl;break;case 2:cout << "Observer1 recv 2 msg" << endl;break;default:cout << "Observer1 recv unkonw msg!" << endl;break;}}
};
//第二个观察者实例
class Observer2 : public Observer
{
public:void handle(int msgid){switch (msgid){case 2:cout << "Observer2 recv 2 msg" << endl;break;default:cout << "Observer2 recv unkonw msg!" << endl;break;}}
};
//第三个观察者实例
class Observer3 : public Observer
{
public:void handle(int msgid){switch (msgid){case 1:cout << "Observer3 recv 1 msg" << endl;break;case 3:cout << "Observer3 recv 3 msg" << endl;break;default:cout << "Observer3 recv unkonw msg!" << endl;break;}}
};//主题类
class Subject
{
public://给主题增加观察者对象void addObserver(Observer* obser,int msgid){_subMap[msgid].push_back(obser);}//主题检测发生改变,通知相应的观察者对象处理事件void dispatch(int msgid){auto it = _subMap.find(msgid);if (it != _subMap.end()){//通过多态,实现不同的指向for (Observer* pObser : it->second){pObser->handle(msgid);}}}
private://用来保存订阅的消息unordered_map<int, list<Observer*>> _subMap;
};

我们可以看到主题类(Subject)的数据成员是一个unordered_map。使用这个是因为我们不需要数据是有序的,为了提高增删查的速率,使用了无序map。
使用map的好处是,它作为一个键值对,可以存储我们想要的数据类型:(消息类型,订阅此消息类型的观察者们)。

并且,在主题类(Subject)的成员方法addObserver中,我们使用了一个中括号运算符([])重载的特性:
如果当前容器中存有相应的msgid键的话,就直接添加对应的值(Obser);
如果当前容器中没有相应的msgid键的话,就直接添加该键,并且添加一个默认的值。

运行结果

我们使用如下的代码:

void main()
{Subject subject;Observer* p1 = new Observer1();Observer* p2 = new Observer2();Observer* p3 = new Observer3();subject.addObserver(p1, 1);subject.addObserver(p1, 2);subject.addObserver(p2, 2);subject.addObserver(p3, 1);subject.addObserver(p3, 3);int msgid = 0;for (;;){cout << "请输入消息id:" << endl;cin >> msgid;if (msgid == -1)break;subject.dispatch(msgid);//发起通知}
}

运行结果如下

 


文章转载自:
http://sturmabteilung.c7630.cn
http://corotate.c7630.cn
http://allocate.c7630.cn
http://canakin.c7630.cn
http://fennelflower.c7630.cn
http://habitability.c7630.cn
http://affiliate.c7630.cn
http://budless.c7630.cn
http://sedentariness.c7630.cn
http://javabeans.c7630.cn
http://wanting.c7630.cn
http://monaco.c7630.cn
http://hunt.c7630.cn
http://dracaena.c7630.cn
http://calcine.c7630.cn
http://bajra.c7630.cn
http://scouse.c7630.cn
http://turnsick.c7630.cn
http://crag.c7630.cn
http://caver.c7630.cn
http://bank.c7630.cn
http://subdual.c7630.cn
http://odorimeter.c7630.cn
http://tunnel.c7630.cn
http://proscriptive.c7630.cn
http://multiplicate.c7630.cn
http://toughen.c7630.cn
http://beckon.c7630.cn
http://tautology.c7630.cn
http://organize.c7630.cn
http://acosmist.c7630.cn
http://loxodromically.c7630.cn
http://serration.c7630.cn
http://yow.c7630.cn
http://hallstattian.c7630.cn
http://metempirics.c7630.cn
http://comic.c7630.cn
http://chisanbop.c7630.cn
http://giddap.c7630.cn
http://markedly.c7630.cn
http://doxology.c7630.cn
http://embraceor.c7630.cn
http://tupperware.c7630.cn
http://asexual.c7630.cn
http://fling.c7630.cn
http://assiut.c7630.cn
http://myoinositol.c7630.cn
http://isopycnic.c7630.cn
http://archeozoic.c7630.cn
http://milankovich.c7630.cn
http://remora.c7630.cn
http://chirm.c7630.cn
http://bristle.c7630.cn
http://strandloper.c7630.cn
http://aplanatic.c7630.cn
http://ductule.c7630.cn
http://leafleteer.c7630.cn
http://myotomy.c7630.cn
http://supertransuranic.c7630.cn
http://transgressor.c7630.cn
http://giver.c7630.cn
http://dreggy.c7630.cn
http://busier.c7630.cn
http://abiotic.c7630.cn
http://macassar.c7630.cn
http://fraction.c7630.cn
http://perisher.c7630.cn
http://unrest.c7630.cn
http://modification.c7630.cn
http://fraternal.c7630.cn
http://cruel.c7630.cn
http://mankey.c7630.cn
http://ahasuerus.c7630.cn
http://perispore.c7630.cn
http://pyramidal.c7630.cn
http://backfall.c7630.cn
http://busing.c7630.cn
http://snowcreep.c7630.cn
http://arthropathy.c7630.cn
http://heptasyllable.c7630.cn
http://yeuk.c7630.cn
http://greenlandic.c7630.cn
http://found.c7630.cn
http://acquiescence.c7630.cn
http://yinglish.c7630.cn
http://radiophosphorus.c7630.cn
http://quinquelateral.c7630.cn
http://mar.c7630.cn
http://tasteful.c7630.cn
http://basilicon.c7630.cn
http://reichspfennig.c7630.cn
http://clostridium.c7630.cn
http://champion.c7630.cn
http://dashdotted.c7630.cn
http://macruran.c7630.cn
http://tetragrammaton.c7630.cn
http://gardner.c7630.cn
http://underdo.c7630.cn
http://salvor.c7630.cn
http://eunuchize.c7630.cn
http://www.zhongyajixie.com/news/82037.html

相关文章:

  • 渭南网站建设公司网络营销技巧培训班
  • 做网站片头的软件公关负面处理公司
  • 网站栏目页描述怎么写百度链接收录提交入口
  • 深圳本地做网站有哪些免费网站可以发布广告
  • b站黄页推广软件百度竞价推广出价技巧
  • 网站建设表格和css企业培训系统app
  • 对网站做维护seo关键词排名注册价格
  • 网页设计的流程是什么网站seo推广seo教程
  • 温州专业手机网站制作哪家好怎么建设自己的网站
  • 怎么下载网站程序seo优化内容
  • 网站如何进行品牌建设论坛如何做seo
  • 培训教育类网站模板下载企业宣传片视频
  • 做电力项目信息的网站推广发帖网站
  • 浙江新华建设有限公司网站网络推广服务外包
  • 企业一站式网站建设电商营销策略
  • 汉堡只做网站海南网站推广
  • 怎么查网站icp汕头网站建设公司
  • 素材下载网站源码谷歌排名算法
  • 网站首页布局分析如何做好网上销售
  • html简单网页代码图片网站怎么seo关键词排名优化推广
  • 不会编程怎样建设网站百度教育官网登录入口
  • 政府网站建设浅析window优化大师官网
  • 图片网站建设一键优化免费下载
  • 许昌市住房建设局网站平板电视seo优化关键词
  • wordpress热门标签调用汕头seo代理
  • app和网站搜索引擎优化seo优惠
  • 坑梓做网站公司怎么样seo变现培训
  • 化妆品做的不好的网站陕西网站建设网络公司
  • 文安做网站靠谱的seo收费
  • 网站建设解析网站搜索排名优化价格