行为型模式——观察者模式210914

Observer(观察者,Behavioral Pattern)

问题:看孩子

  • 孩子哭了,爸爸要立刻检查孩子并安慰他
  • 我们可以给爸爸单独开一个线程看着孩子 在这里插入图片描述
  • 但是这个是一个一直进行的循环,很占用CPU
  • 试了一下,真挺猛的,中间突然高的那一段就是程序运行的时候在这里插入图片描述
  • 如果我还想要妈妈也看着,也很简单,只要把爸爸代码复制一遍改个名字
  • 然后再运行
    在这里插入图片描述
  • 如果有三个孩子,根据我们的设计,一个爹/妈只能看一个娃,所以会有三个人来看这三个娃,CPU会受不了的
  • 我们要想办法!
  • 平常我们看孩子不可能一直在看,都是要听到孩子哭才去看,所以这里的想法就是不要爸爸去一直观察,而是等着娃哭,再去观察
  • 而且我们的Observer还不够nb,如果不用一直观察的话,那我一个爹就可以管一堆娃了,同理,一个娃也可以有一堆观察者
  • 这就引出了我们的观察者模式

Observer Pattern

它是啥

  • 根据我们上面的例子,针对这种情境,我们首先要有被观察的对象,我们称之为Subject,Subjects会改变状态,孩子可以哭或者高兴,商品价格可以升或降,你喜欢的姑娘可以有男朋友或者单身
  • 我们还要有观察者Observer,比如看孩子的爸爸妈妈,看商品价格的剁手党,看姑娘是否单身的你
  • 从看孩子过程中的问题我们可以发现,Observer应当是可以观察多个对象,同样一个Subject也被多个Observer观察
    • 爹妈一起看一个孩子,爹一个人也能看一堆孩子
    • 商品可以被一堆人等着降价,你也可以等着一堆漂亮衣服降价
    • 一堆人等着漂亮姑娘单身,你也可以等着一堆漂亮姑娘单身
  • 还有一个小问题,Observer不能一直看着Subject啊,生活中是浪费精力,计算机中是浪费内存
  • 我们完全可以让Subject在改变状态时自己通知Observers
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值