我正在浏览一篇关于如何在 python 中实现观察者模式的帖子。在同一个帖子上有这些评论。
1)在python中你也可以只使用普通函数,'Observer'类并不是真正需要的。
2) 这是 Java 程序员在切换到 Python 后尝试做的一个很好的例子——他们觉得 Python 缺少所有这些废话并尝试“移植”它。
这些评论暗示观察者模式在 python 中并不是真正有用的,并且存在其他方法可以达到相同的效果。这是真的吗?如果怎么做呢?
下面是观察者模式的代码:
class Observable(object):
def __init__(self):
self.observers = []
def register(self, observer):
if not observer in self.observers:
self.observers.append(observer)
def unregister(self, observer):
if observer in self.observers:
self.observers.remove(observer)
def unregister_all(self):
if self.observers:
del self.observers[:]
def update_observers(self, *args, **kwargs):
for observer in self.observers:
observer.update(*args, **kwargs)
from abc import ABCMeta, abstractmethod
class Observer(object):
__metaclass__ = ABCMeta
@abstractmethod
def update(self, *args, **kwargs):
pass
class AmericanStockMarket(Observer):
def update(self, *args, **kwargs):
print("American stock market received: {0}\n{1}".format(args, kwargs))
class EuropeanStockMarket(Observer):
def update(self, *args, **kwargs):
print("European stock market received: {0}\n{1}".format(args, kwargs))
if __name__ == "__main__":
observable = Observable()
american_observer = AmericanStockMarket()
observable.register(american_observer)
european_observer = EuropeanStockMarket()
observable.register(european_observer)
observable.update_observers('Market Rally', something='Hello World')