python观察者模式_python 观察者模式

python 观察者模式

前言

emm写的仓促就不截UML类图了,书本Chapter10,P313能看到图

代码

一旦观察的主题有更新,就会通知到观察者们,下面的例子是最简单的一个观察者范例,假设这是一群投机分子密切关注(军 火)仓库的产品与数量变动

class Inventory:

def __init__(self):

self.observers = []

self._product = None

self._quantity = 0

def attach(self, observer):

self.observers.append(observer)

@property

def product(self):

return self._product

@product.setter

def product(self, value):

self._product = value

self._update_observers()

@property

def quantity(self):

return self._quantity

@quantity.setter

def quantity(self, value):

self._quantity = value

self._update_observers()

def _update_observers(self):

for observer in self.observers:

observer()

class ConsoleObserver:

def __init__(self, inventory, name):

self.inventory = inventory

self.name = name

def __call__(self):

print(self.name, " ", self.inventory.product)

print(self.name, " ", self.inventory.quantity)

if __name__ == "__main__":

i = Inventory()

c = ConsoleObserver(i, "c1")

i.attach(c)

c2 = ConsoleObserver(i, "c2")

i.attach(c2)

i.quantity = "Gun"

i.quantity = 7

这里稍微修改了下书本的代码,让我们能更清晰的看到是哪个观察者收到的通知。

0ad83911d6b8ffdf80934c46fecf5872.png

关键点在于Callable函数,其将ConsoleObserver变成一个可以调用的函数,于是我们一更新仓库的动静(调用set方法),就会触发_update_observers,因此投机分子收到消息然后print他们的情报(狗头)

复习再紧张也不能忘记制造有趣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值