本文主要是介绍python 设计模式-观察者模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
观察者模式中主要两个核心角色:主题和观察者,兼顾面向对象的一些原则,还可以抽象出抽象主题和抽象观察者角色。这里使用 python 对观察者模式进行一个简单的实现,python 是 ‘鸭子类型’ 的语言,天生就兼容各种接口,只要类中提供了相应的方法就行,所以特意弄个抽象类搞得有点画蛇添足了,但有时候为了让开发人员少犯错误,为开发提供统一规范,提供一些抽象类作为基类使用也是合理的。
from abc import ABCMeta, abstractmethodclass Subject:def __init__(self):self._observers = set()def register(self, observer):if not issubclass(observer.__class__, Observer):raise Exception('something wrong with your Observer')self._observers.add(observer)def unregister(self, observer):self._observers.remove(observer)def notify(self, data):for o in self._observers:o.handler(data)class Observer(metaclass=ABCMeta):@abstractmethoddef handler(self, data):passclass ObserverA(Observer):def handler(self, data):print('observerA handler {}'.format(data))class ObserverB(Observer):def handler(self, data):print('observerB handler {}'.format(data))class ObserverC(Observer):def handler(self, data):print('observerC handler {}'.format(data))if __name__ == '__main__':s = Subject()s.register(ObserverA())s.register(ObserverB())s.register(ObserverC())s.notify('hello')
输出
observerC handler hello
observerA handler hello
observerB handler hello
这篇关于python 设计模式-观察者模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!