提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有这种模式设计,今天专门学习并总结了一下
提示:以下是本篇文章正文内容,下面案例可供参考
代码如下(示例):
class Observer: # 构建一个观察者
def update(self, observable, *args, **kwargs):
pass
class Observable: # 构建一个被观察者
def __init__(self):
self._observers = []
def add_observer(self, observer):
self._observers.append(observer) # 添加观察者对象
def remove_observer(self, observer): # 移除观察者对象
self._observers.remove(observer)
def notify_observers(self, *args, **kwargs): # 通知每一个观察者
for observer in self._observers:
observer.update(self, *args, **kwargs) # 注意,这里的self传入的是对象本身
class TicketSystem(Observable): # 票务系统类
def __init__(self, ticket_price):
super().__init__()
self.__ticket_price = ticket_price
@property
def ticket_price(self):
return self.__ticket_price
@ticket_price.setter
def ticket_price(self, price):
self.__ticket_price = price
self.notify_observers(price)
class User(Observer): # 用户
def update(self, observable, *args, **kwargs):
print('user: {} is now ticket_price {}'.format(observable, args[0])) # 这里的observable就是对象本身
class Scalper(Observer): # 黄牛
def update(self, observable, *args, **kwargs):
print('scalper: {} is now ticket_price {}'.format(observable, args[0]))
if __name__ == '__main__':
system = TicketSystem(18) # 构建票务系统
user_obj = User() # 构建用户对象
scalper_obj = Scalper() # 构建黄牛对象
system.add_observer(user_obj) # 用户注册回调
system.add_observer(scalper_obj) # 黄牛注册回调
system.ticket_price = 20 # 修改票价为20
system.remove_observer(user_obj) # 用户取消回调
system.ticket_price = 15 # 修改票价为18
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步