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

太原网站优化多少钱文字图片一键生成器

太原网站优化多少钱,文字图片一键生成器,做网上推广网站,wordpress能外链的主题23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…

23种计模式之 前言 +(5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、+(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、+(11)策略模式、责任链模式、命令模式、中介者模式、模板模式、迭代器模式、访问者模式、观察者模式、解释器模式、备忘录模式、状态模式 + 设计原则

19-Python与设计模式–观察者模式

一、火警报警器

在门面模式中,我们提到过火警报警器。在当时,我们关注的是通过封装减少代码重复。
而今天,我们将从业务流程的实现角度,来再次实现该火警报警器。
class AlarmSensor:def run(self):print "Alarm Ring..."
class WaterSprinker:def run(self):print "Spray Water..."
class EmergencyDialer:def run(self):print "Dial 119..."
以上是门面模式中的三个传感器类的结构。仔细分析业务,报警器、洒水器、拨号器都是“观察”
烟雾传感器的情况来做反应的。因而,他们三个都是观察者,而烟雾传感器则是被观察对象了。
根据分析,将三个类提取共性,泛化出“观察者”类,并构造被观察者。

观察者如下:

class Observer:def update(self):pass
class AlarmSensor(Observer):def update(self,action):print "Alarm Got: %s" % actionself.runAlarm()def runAlarm(self):print "Alarm Ring..."
class WaterSprinker(Observer):def update(self,action):print "Sprinker Got: %s" % actionself.runSprinker()def runSprinker(self):print "Spray Water..."
class EmergencyDialer(Observer):def update(self,action):print "Dialer Got: %s"%actionself.runDialer()def runDialer(self):print "Dial 119..."

观察者中定义了update接口,如果被观察者状态比较多,或者每个具体的观察者方法比较多,
可以通过update传参数进行更丰富的控制。

下面构造被观察者。

class Observed:observers=[]action=""def addObserver(self,observer):self.observers.append(observer)def notifyAll(self):for obs in self.observers:obs.update(self.action)
class smokeSensor(Observed):def setAction(self,action):self.action=actiondef isFire(self):return True

被观察者中首先将观察对象加入到观察者数组中,若发生情况,则通过notifyAll通知各观察者。

业务代码如下:

if __name__=="__main__":alarm=AlarmSensor()sprinker=WaterSprinker()dialer=EmergencyDialer()smoke_sensor=smokeSensor()smoke_sensor.addObserver(alarm)smoke_sensor.addObserver(sprinker)smoke_sensor.addObserver(dialer)if smoke_sensor.isFire():smoke_sensor.setAction("On Fire!")smoke_sensor.notifyAll()

打印如下:

Alarm Got: On Fire! Alarm Ring… Sprinker Got: On Fire! Spray
Water… Dialer Got: On Fire! Dial 119…

二、观察者模式

观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,
所有依赖于它的对象都会得到通知,并被自动更新。观察者模式的通知方式可以通过直接调用等同步方式实现(如函数调用,HTTP接口调用等),
也可以通过消息队列异步调用(同步调用指被观察者发布消息后,必须等所有观察者响应结束后才可以进行
接下来的操作;异步调用指被观察者发布消息后,即可进行接下来的操作。)。
事实上,许多开源的消息队列就直接支持发布-订阅模式,如Zero MQ等。

三、观察者模式的优点和应用场景

优点:
1、观察者与被观察者之间是抽象耦合的;
2、可以将许多符合单一职责原则的模块进行触发,也可以很方便地实现广播。应用场景:
1、消息交换场景。如上述说到的消息队列等;
2、多级触发场景。比如支持中断模式的场景中,一个中断即会引发一连串反应,就可以使用观察者模式。

四、观察者模式的缺点

1、观察者模式可能会带来整体系统效率的浪费;
2、如果被观察者之间有依赖关系,其逻辑关系的梳理需要费些心思。
http://www.yayakq.cn/news/156161/

相关文章:

  • 河南建设人才招聘专业网站asp装修网站源码
  • 做名片素材网站网络营销策略有哪五种
  • 网站开发建设费用什么网站的图片可以做商用
  • 做电子政务 网站五金外发加工网
  • 南充做网站电话百度百科分类方法
  • 购物国外网站的建立免费php企业网站
  • 科技公司网站建设方案书模板做网站的不给ftp
  • 上海商业网站建设费用建行企业银行官网
  • 建网站能干嘛山东住房和城乡建设厅官网
  • 云虚拟主机和网站建设wordpress 邮件文本
  • 提供网站建设的公司兰州手机网站建设
  • 那些网站使用vue做的百度推广代理查询
  • 福田网站建设报价无忧中英繁企业网站系统 破解
  • 我的网站怎么不能搜索培训机构哪家最好
  • 做不锈钢的网站有哪些wordpress设置密码链接
  • 农业局网站建设实施方案如何禁止某ip访问网站
  • 嘉兴服饰网站建设网页设计基础心得体会
  • 上海网站制作公司联系方式微信附近人推广引流
  • 商务网站建设步骤有几个西宁知名网站制作公司
  • 什么是网站维护花瓣wordpress主题
  • 有哪些网站可以做家教自己怎么开网站做销售
  • 注入漏洞网站源码连锁店管理网站开发
  • 卷皮淘客网站怎么做济宁网站建设只要500元
  • 铁路建设网站wordpress 主题学习
  • ppt做的模板下载网站网站开发商城1688
  • 网站免费软件推荐学院网站建设规划
  • 东莞万江网站建设公司如何开发一个网站
  • 自己建设淘宝客网站需要备案么建设银行公积金预约网站
  • 建筑工程教育网官方网站楚雄市住房和城乡建设局网站
  • 泉州公司做网站福建住房和城乡建设网站证书查询