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

wordpress 最新 热门 随机 切换四川seo快速排名

wordpress 最新 热门 随机 切换,四川seo快速排名,网站开发建设总结,销售网站开发观察者模式 单个对此(发布者,也称为主体或是可观察对象)和一个或是多个对象(订阅者,也称为观察者)之间的发布-订阅关系。增加发布者和订阅这个之间解耦,使得在运行时添加、删除订阅者变得容易。…

观察者模式

单个对此(发布者,也称为主体或是可观察对象)和一个或是多个对象(订阅者,也称为观察者)之间的发布-订阅关系。增加发布者和订阅这个之间解耦,使得在运行时添加、删除订阅者变得容易。对于MVC, 发布者是模型,订阅者是视图。

拍卖场景:

每个竞买人,都有一个号码牌,当天安门想要出价时,就举起号码牌。当竞买人举起牌子时,拍卖人即为主体,更新竞买价格,并将新价格广播给所有竞买人(竞买者)。

软件场景: 

RabbitMQ  库可以用于应用程序添加异步消息支持,支持多种消息协议,http和amqp 。RbbitMQ 可以在Python 应用与发布订阅模式,该模式就是观察者设计模式。

新闻流: 

使用RSS 、Atom 或其他相关格式。可以关注一个新闻流,每次更新时候,你都会收到一个关于更新的通知。

事件驱动系统

监听器监听特定的事件,监听器在监听的事件被创建时触发。这个事件可以是按下一个特定的键,移动鼠标,事件扮演发布者的角色,监听器扮演观察者的角色。可以为单个事件(发布者)添加多个监听器(观察者)。

案例

格式化程序,有一个默认的格式化程序,以十进制格式显示一个值,可以添加、注册更多的格式化程序。每次更新默认的格式化程序时候,都会通知已经注册的格式化程序采取行动。程序以相关格式显示新的值。

(1) 定义 Publisher 类。

(2) 定义 DefaultFormatter 类,以及特殊的 __init__ 和 __str__ 方法。

(3) 向 DefaultFormatter 类添加 data 属性的设置方法和获取方法。

(4) 定义两个观察者类

(5) 添加程序的主体部分。 main() 函数的第一部分如下。

class Publisher:def __init__(self):self.observers = []  # 保存观察者def add(self, observer):if observer not in self.observers:self.observers.append(observer)else:print(f'Failed to add:{observer}')def remove(self, observer):try:self.observers.remove(observer)except ValueError:print(f"Failed to remove:{observer}")def notify(self):print("所有观察者通知更新")[o.notify(self) for o in self.observers]class DefaultFormatter(Publisher):def __init__(self, name):Publisher.__init__(self)self.name = nameself._data = 0def __str__(self):return f"{type(self).__name__}:'{self.name}' has data ={self._data}"@propertydef data(self):return self._data@data.setterdef data(self, new_value):try:self._data = int(new_value)except ValueError as e:print(f"Error:{e}")else:self.notify()  # 执行通知
"""
定义两个观察者
"""class HexFormatterObs:def notify(self, publisher):value = hex(publisher.data)print(f"{type(self).__name__}: '{publisher.data}' has now hex data ={value}")class BinaryFormatterObs:def notify(self, publisher):value = bin(publisher.data)print(f"{type(self).__name__}:'{publisher.data}' has  now bin data ={value}")def main():df=DefaultFormatter('test1')print(df)print("---------------------")hf=HexFormatterObs()df.add(hf)df.data=3print(df)bf=BinaryFormatterObs()df.add(bf)df.data=21print(df)print("----------hello-----------")df.data='hello'print(df)print("----------15.8-----------")df.data=15.8print(df)
if __name__ == '__main__':main()# try:#     print("33333")# except:#     print("wwww")# else:#     print("else")

执行结果 

DefaultFormatter:'test1' has data =0
---------------------
所有观察者通知更新
HexFormatterObs: '3' has now hex data =0x3
DefaultFormatter:'test1' has data =3
所有观察者通知更新
HexFormatterObs: '21' has now hex data =0x15
BinaryFormatterObs:'21' has  now bin data =0b10101
DefaultFormatter:'test1' has data =21
----------hello-----------
Error:invalid literal for int() with base 10: 'hello'
DefaultFormatter:'test1' has data =21
----------15.8-----------
所有观察者通知更新
HexFormatterObs: '15' has now hex data =0xf
BinaryFormatterObs:'15' has  now bin data =0b1111
DefaultFormatter:'test1' has data =15

http://www.zhongyajixie.com/news/48024.html

相关文章:

  • 电子商务网站开发老铁外链
  • wordpress搭建视频站百姓网推广怎么收费标准
  • 衡阳北京网站建设淘宝搜索关键词排名查询工具
  • 北京vi设计济南seo排名优化推广
  • 查看网站的外链泰安seo排名
  • 完整网站开发视频教程淘宝运营培训
  • 班级网站 模板杭州优化seo
  • dw做网站首页长宽设置多少常用的网络营销策略有哪些
  • 甘肃省环保建设申报网站网站建设方案推广
  • 小程序注册申请需要什么资料浙江专业网站seo
  • 做网站准备什么问题太原seo网站优化
  • 十大猎头公司百度seo优化技术
  • 贵州网站建设吧360建站系统
  • 国外做电商网站有哪些方面如何网上免费打广告
  • c2c网站名称今日刚刚发生的军事新闻
  • 网站开发怎么用自己的电脑seo学校培训班
  • 建设农村信息网站2345网址导航官网下载
  • 网站建设实训计划书百度平台推广该怎么做
  • 58同城建设银行招聘网站无锡seo公司哪家好
  • 汽车门户网站源码网站营销网站营销推广
  • 公众号编辑器哪个好青岛建站seo公司
  • hibernate适合网站开发吗百度快速排名软件下载
  • wordpress 卡通插件智能优化网站
  • 可以做网页的网站chatgpt 网址
  • 在线生成app免费seo网络推广员招聘
  • 搭建什么网站好长春seo优化
  • 如何建设电商网站商品标题关键词优化
  • 做任务网站建设新产品市场推广方案
  • 手机网站定制开发费用网站的推广方案的内容有哪些
  • 我的网站 学校 power by dedecms交易链接