提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 二、具体代码
- 写在结尾
前言
最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有这种模式设计,今天专门学习并总结了一下
提示:以下是本篇文章正文内容,下面案例可供参考
二、具体代码
代码如下(示例):
class Observer: # 构建一个观察者def update(self, observable, *args, **kwargs):passclass 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@propertydef ticket_price(self):return self.__ticket_price@ticket_price.setterdef ticket_price(self, price):self.__ticket_price = priceself.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 # 修改票价为20system.remove_observer(user_obj) # 用户取消回调system.ticket_price = 15 # 修改票价为18
运行结果
写在结尾
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步