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

网站开发项目启动成本河南网站排名

网站开发项目启动成本,河南网站排名,ui软件,百度推广是干什么的观察者模式 单个对此(发布者,也称为主体或是可观察对象)和一个或是多个对象(订阅者,也称为观察者)之间的发布-订阅关系。增加发布者和订阅这个之间解耦,使得在运行时添加、删除订阅者变得容易。…

观察者模式

单个对此(发布者,也称为主体或是可观察对象)和一个或是多个对象(订阅者,也称为观察者)之间的发布-订阅关系。增加发布者和订阅这个之间解耦,使得在运行时添加、删除订阅者变得容易。对于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.15wanjia.com/news/5286.html

相关文章:

  • 表格如何给网站做链接地址参考消息今天新闻
  • 云服务器可以做网站吗怎么去推广自己的公司
  • 怎么去掉2345网址导航南京seo网站优化
  • 网站代理备案 靠谱么漂亮的网页设计
  • 家电网站制作代运营公司排名
  • 建设银行网站怎么交学费网页开发
  • 四川专业网站建设公司谷歌 翻墙入口
  • 保定专业做网站的公司哪家好推广什么软件可以长期赚钱
  • 网站经常被黑网上怎么推广公司产品
  • 中山独立站优化专业网页设计和网站制作公司
  • 网站建站过程分析网络营销师资格证报名
  • 园区官方网站建设深圳网络整合营销公司
  • 武汉最好的网站公司深圳百度seo公司
  • 46云免费主机一键优化清理加速
  • 做网站属于什么技术seo工资多少
  • 百度 网站移动适配发布软文的平台有哪些
  • 网站建设主结构新闻 近期大事件
  • 自己做的网站不满屏网络广告的收费模式有哪些
  • 山西省建设监理官方网站南昌seo代理商
  • 晋城网站建设百度 营销怎么收费
  • 国内做免费视频网站有哪些网络营销技巧
  • 做软件贵还是做网站贵百度竞价推广联系方式
  • 网站的颜色搭配域名注册1元
  • 一个公司可以备案几个网站黑科技引流推广神器怎么下载
  • visual制作网站开发搜索引擎营销的方法
  • 先备案 做网站seo百度seo排名优化软件
  • dede网站url采集学电脑培训班
  • 学校网站建设与维护方案常见的网站推广方式有哪些
  • 做网站怎么宣传运营怎么拿到百度推广的代理
  • 做党和人民满意的好教师PPT网站产品网络营销