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

沙井网站推广长腿蜘蛛wordpress

沙井网站推广,长腿蜘蛛wordpress,上海网站建设广告语,小说网站怎么做seo观察者模式#xff08;Observer Pattern#xff09;是一种行为设计模式#xff0c;用于在对象之间建立一对多的依赖关系#xff0c;当一个对象的状态发生变化时#xff0c;它的所有依赖对象都会得到通知并自动更新。 在观察者模式中#xff0c;主题和观察者之间是松耦合…观察者模式Observer Pattern是一种行为设计模式用于在对象之间建立一对多的依赖关系当一个对象的状态发生变化时它的所有依赖对象都会得到通知并自动更新。 在观察者模式中主题和观察者之间是松耦合的主题并不知道观察者的具体实现只依赖于观察者接口。这种松耦合的关系使得主题和观察者能够独立变化而不会相互影响。 #include iostream #include string #include unordered_map #include bits/stdc.h #include listusing namespace std; /* * 行为型模式主要关注的是对象之间的通信 观察者-监听者模式 发布-订阅模式 设计模式主要关注的对象是一对多的关系 也就是说多个对象都依赖与这一个对象当这个对象的状态发生改变时其他对象都能够 接收到相应的通知。 */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 unknow 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 unknow 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 unknow msg! endl;break;}} };class Subject { public: //主题增加相应观察者对象void addObserver(Observer* obser, int msgid){_subMap[msgid].push_back(obser);/*auto it _subMap.find(msgid);if (it ! _subMap.end()){ it-second.push_back(obser);}else{listObserver* lis;lis.push_back(obser);_subMap.insert({ msgid,lis });}*/}//主题检测发生改变通知相应的观察者对象处理事件void dispatch(int msgid) {auto it _subMap.find(msgid);if (it ! _subMap.end()){for (Observer* pObser : it-second){pObser-handle(msgid);}}} private:unordered_mapint, listObserver* _subMap; };int 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 ;cin msgid;if (msgid -1) break;subject.dispatch(msgid);}return 0; }输入消息id 2 Observer1 recv 2 msg! Observer2 recv 2 msg!输入消息id 1 Observer1 recv 1 msg! Observer3 recv 1 msg!输入消息id 3 Observer3 recv 3 msg!主要解决的是对象与对象之间的依赖关系多个对象依赖于一个对象该对象主要负责检测我们消息发没发生状态改变有改变了就要通知相应的观察者。 这里涉及多对象内存开辟问题需要使用智能指针去优化#includeiostream #includeunordered_map #includelist #includebits/stdc.h #includememoryclass Observer { public:virtual void handle(int msgid) 0; //纯虚函数没有具体实现 };class Observer1 : public Observer { public:void handle(int msgid){switch (msgid){case 1:std::cout Observer 1 recv 1 msg! std::endl;break;case 2:std::cout Observer 1 recv 2 msg! std::endl;break;default:std::cout Observer 1 recv unknow msg! std::endl;break;}} };class Observer2 : public Observer { public:void handle(int msgid){switch (msgid){case 2:std::cout Observer 2 recv 2 msg! std::endl;break;default:std::cout Observer 2 recv unknow msg! std::endl;break;}} };class Observer3 : public Observer { public:void handle(int msgid){switch (msgid){case 1:std::cout Obersever 3 recv 1 msg! std::endl;break;case 3:std::cout Obersever 3 recv 3 msg! std::endl;break;default:std::cout Observer 3 recv unknow msg! std::endl;break;}} };class Subject { public:void addObserver(std::weak_ptrObserver obser, int msgid){_subMap[msgid].push_back(obser);}void dispatch(int msgid){auto it _subMap.find(msgid);if (it ! _subMap.end()){for (auto it1 it-second.begin(); it1 ! it-second.end(); it1){ // 与强指针绑定的弱指针通过lock函数提升为强指针可以避免循环引用问题同时判断所绑定的对象是否被销毁std::shared_ptrObservertmp it1-lock();if (tmp) {tmp-handle(msgid);}}}} private:std::unordered_mapint, std::liststd::weak_ptrObserver _subMap; };int main() {Subject subject;std::shared_ptrObserverp1(new Observer1);std::shared_ptrObserverp2(new Observer2);std::shared_ptrObserverp3(new Observer3);// shared_ptr赋值给weak_ptr绑定subject.addObserver(p1, 1);subject.addObserver(p1, 2);subject.addObserver(p2, 2);subject.addObserver(p3, 1);subject.addObserver(p3, 3);int msgid 0;for (;;){std::cout 输入消息id ;std::cin msgid;if (msgid -1) break;subject.dispatch(msgid);}return 0; }重点就是这里一开始用弱指针去绑定一些对象subject.addObserver(p1, 1);通过弱指针提升为强指针来判断所绑定的对象是否被销毁std::shared_ptrObservertmp it1-lock();muduo项目中channel与TcpConnection对象绑定 std::shared_ptrObservertmp it1-lock(); if (tmp) {tmp-handle(msgid); }
http://www.dnsts.com.cn/news/103871.html

相关文章:

  • 北京建行网站中国制造网国际站
  • WordPress部分内容登录可见网站运营推广选择乐云seo
  • 上海外贸soho网站建设房屋平面图设计app
  • 深圳手机网站模板Wordpress设置Ip不开放
  • 潍坊做网站公司补脾最商城网站前台模板
  • 黄骅网站建设公司php做网站用html做吗
  • 东营房地产网站建设建立网站的关键是定位
  • 专业建站提供商重庆装修公司平台
  • 手机如何创造网站app排行榜
  • 漯河最新今天的消息网站建设阿华seo
  • 大连网站排名优wordpress4.5.3zhcn
  • 商务网站规划设计要点vs2012 建网站
  • 企业网站和官网的区别如何自己做淘宝客网站
  • 手机上传视频网站开发网上怎么自己注销营业执照
  • 网站头部代码营销策略模板
  • 免费建站网站号如何投放网络广告
  • 夏邑好心情网站建设有限公司扩展名网站
  • 聚美优品网站模版无极电影网首页
  • 外汇平台网站开发需求说明福州商城网站开发公司
  • 新网 网站建设农机局网站建设方案
  • 计算机网络技术电商网站建设与运营方向windows优化大师有哪些功能
  • elementui 做的网站html网页小游戏代码
  • 怎么做网站安全运维泰州哪家做网站建设比较好
  • 2019年建设什么网站好重庆建网站 私单
  • 怎么做qq钓鱼网站吗深圳网站设计公司在哪里
  • 做网站需要多少钱 网络服务视频号直播怎么引流
  • 网站规划建设实训报告网站建站客户需求表单
  • 做响应式网站多少钱论坛类的网站怎么做
  • 装修公司网站怎么做的电子商城网站开发项目描述
  • 企业门户网站源码中国网站备案信息查询