举一个简单的例子,轻松搞懂所谓的“观察者模式”

观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新自已。

 看上面那些可能不太容易理解,简单举个例子,假如有一个产品列表,当这个产品列表更新的时候就会同步到一些电商平台,最简单的可能会用if进行判断,当产品列表更新就同步,例如下图:

按照这种方法,如果还有其他电商合作,那么还要继续在if语句里增加逻辑。首先,如果多达数百家电商,那么if的逻辑就异常复杂了。如果推送商品给淘宝发生异常,需要捕捉异常,避免影响之后的电商接口,导致其不能往下进行,这样代码耦合就会增多,同时也不利于维护和扩展

在现实中对开发团队而言,可能产品库是产品团队维护,而合作的电商又是电商团队在维护,这样两个团队之间又要维护同一段代码,显然会造成责任不清的问题。

1.观察者模式

它更容易扩展,责任更加清晰,我们把电商看成是一个观察者而产品列表就是被观察者对象࿰

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,假设你正在开发一款手游,其中有一个抽卡系统。抽卡系统中有多个角色,每个角色都有不同的稀有度和属性。现在,你想要实现一个观察者模式来让玩家在抽到不同的角色时获得不同的提示。 首先,你需要创建一个被观察者类 CardSystem,它包含了所有的角色信息和抽卡方法。当玩家抽到一个角色时,CardSystem 将会通知所有观察者。 ```python class CardSystem: def __init__(self): self.observers = [] self.characters = [] def add_observer(self, observer): self.observers.append(observer) def remove_observer(self, observer): self.observers.remove(observer) def notify_observers(self, character): for observer in self.observers: observer.update(character) def add_character(self, character): self.characters.append(character) def draw_card(self): character = random.choice(self.characters) self.notify_observers(character) ``` 然后,你需要创建一个观察者类 Observer,它包含了玩家抽到不同角色时的提示信息。在 Observer 类中,你需要实现一个 update 方法,用来接收通知并显示相应的提示。 ```python class Observer: def __init__(self, name): self.name = name def update(self, character): if character.rarity == 'SR': print(f'{self.name}抽到了一个稀有度为SR的角色!') elif character.rarity == 'R': print(f'{self.name}抽到了一个稀有度为R的角色!') elif character.rarity == 'N': print(f'{self.name}抽到了一个稀有度为N的角色!') ``` 最后,你需要在程序中实例化 CardSystem 和 Observer,并将 Observer 加入到 CardSystem 的观察者列表中。现在,每当玩家抽到一个角色时,所有观察者都会收到通知并显示相应的提示。 ```python card_system = CardSystem() observer1 = Observer('玩家1') observer2 = Observer('玩家2') card_system.add_observer(observer1) card_system.add_observer(observer2) card_system.add_character(Character('角色1', 'SR', '属性1')) card_system.add_character(Character('角色2', 'R', '属性2')) card_system.add_character(Character('角色3', 'N', '属性3')) card_system.draw_card() # 玩家1抽到了一个稀有度为R的角色! 玩家2抽到了一个稀有度为SR的角色! ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值