Python常用设计模式:观察者模式

观察者模式:又叫发布订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时,会通知所有观察者对象,是他们能自动更新自己。

事件驱动系统是观察者模式的例子,在这种系统中,监听者被用于监听特定事件。监听者正在监听的事件被创建出来时,就会触发它们。这个事件可以是键入(键盘的)某个特定键、移动鼠标或者其他。事件扮演发布者的角色,监听者则扮演观察者的角色。在这里,关键点是单个事件(发布者)可以关联多个监听者 (观察者) 。

class Monitor:
    """通知者--->班长-->管理观察者"""
    def __init__(self):
        self.observers = [] # 保存观察者对象
        self.status=""  # 表示状态

    def attach(self,observer):
        """绑定每一个观察者"""
        self.observers.append(observer)

    def notify(self):
        """通知每一个观察者"""
        for observser in self.observers:
            observser.update()

class SleepStudentobserver:
    """观察者"""
    def __init__(self,name,monitor):
        self.name=name  # 被观察者姓名
        self.monitor=monitor  # 绑带通知者

    def update(self):
        print("{},{}赶紧起来学习".format(self.monitor.status,self.name))

if __name__=="__main__":
    monitor=Monitor()
    observer1=SleepStudentobserver("迪迦",monitor)
    observer2 = SleepStudentobserver("泰罗", monitor)
    monitor.attach(observer1)
    monitor.attach(observer2)
    monitor.status = '老师又来了'
    monitor.notify()
观察者模式的优点和应用场景

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

观察者模式的缺点

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值