ori*_*rip 18
我个人认为回调,听众和代表之间没有区别.
在观察者模式(又名监听器,又名"多个回调"),很容易实现-只要持有观察名单,并添加或删除它可调用.这些可调用对象可以是函数,绑定方法或使用__call__
魔术方法的类.您所要做的就是定义您期望的界面 - 例如,他们是否接收任何参数.
class Foo(object):
def __init__(self):
self._bar_observers = []
def add_bar_observer(self, observer):
self._bar_observers.append(observer)
def notify_bar(self, param):
for observer in self._bar_observers:
observer(param)
def observer(param):
print "observer(%s)" % param
class Baz(object):
def observer(self, param):
print "Baz.observer(%s)" % param
class CallableClass(object):
def __call__(self, param):
print "CallableClass.__call__(%s)" % param
baz = Baz()
foo = Foo()
foo.add_bar_observer(observer) # function
foo.add_bar_observer(baz.observer) # bound method
foo.add_bar_observer(CallableClass()) # callable instance
foo.notify_bar(3)
Run Code Online (Sandbox Code Playgroud)