观察者模式(Python实现)

来源:互联网 发布:微信支付没网络能用吗 编辑:程序博客网 时间:2024/06/16 16:19

何谓“观察者模式”?本人不喜欢将简单的东西弄得很复杂的样子,遂简要介绍如下。

  • 有一目标物(subject,即observable),有众多观察者(observers)关注其异动;
  • 目标物维护观察者列表,故若要新增观察者,则需向此目标物注册该新观察者;
  • 当目标物有状态变化时,会主动通知在其注册的所有观察者,方式为:以for循环调用所有观察者的notify()方法;故所有观察者都需要有notify()方法
Python的实现如下:
class Observable:    def __init__(self):        self.__observers = []    def register_observer(self, observer):        self.__observers.append(observer)        def notify_observers(self, *args, **kwargs):        for observer in self.__observers:            observer.notify(self, *args, **kwargs)  class Observer:    def __init__(self, observable):        observable.register_observer(self)    def notify(self, observable, *args, **kwargs):        print('Got', args, kwargs, 'From', observable)  subject = Observable()observer = Observer(subject)subject.notify_observers('test')
执行结果为:
('Got', ('test',), {}, 'From', <__main__.Observable instance at 0x6ffffe273f8>)

参考文献: 
  • https://en.wikipedia.org/wiki/Observer_pattern

(完)

1 0