别名:事件订阅、监听
目的
观察者是一种行为型设计模式,它让你可以定义一种订阅机制,以便在观察对象发生任何事件时通知多个对象。
问题
假设你有两种类型的对象:客户和商店。客户对某个特定品牌的产品(比如,新款 iPhone)非常感兴趣,该产品很快就会在商店上架。
客户可以每天去商店查看产品是否有货。但在产品到货之前,大多数这样的行程都是毫无意义的。

另一方面,每当有新产品到货时,商店可以向所有客户发送大量电子邮件(这可能会被视为垃圾邮件)。这将使一些客户免于无休止地前往商店。同时,它也会让那些对新产品不感兴趣的客户感到不满。
看起来我们遇到了一个冲突。要么客户浪费时间检查产品是否有货,要么商店浪费资源通知错误的客户。
解决方案
具有某些有趣状态的对象通常被称为主题,但由于它还将通知其他对象其状态的变化,我们将称其为发布者。所有希望跟踪发布者状态变化的对象都被称为订阅者。
观察者模式建议你在发布者类中添加一个订阅机制,以便单个对象可以订阅或取消订阅来自该发布者的事件流。别担心!这一切听起来并不复杂。实际上,