我们都遵循一个公共帐户。当该公共帐户发布一篇文章时,每个遵循它的人都会收到消息通知。修改对象后,其对象的依赖项的动作抽象自动将其作为观察者模式通知。
观察者模式下有四个主要角色:
主题:观察到的对象的抽象类别,该角色还采用了注册观察者和删除观察者的方法。
具体主体:特定的观察对象。在示例的开头,公共帐户是一个特定的观察对象。
观察者:观察者的界面,负责接收观察到的对象更改和更新的状态。
具体探索者:特定的观察者在示例的开头,每个关注公共帐户的人都是特定的观察者。
仅仅看这个概念就很难准确地理解这种设计模式在做什么。接下来,您可以通过一个特定示例感受到它。此示例仍然使用文章开始的公共帐户示例。首先定义观察者接口,并负责更新操作。
上面代码中的主题是一个抽象的观察到对象类。本类定义了添加观察者,删除观察者,通知观察者的方法,并定义了两个获取标题并生成文章的抽象方法:
然后定义特定的观察对象。这是一个特定的公共帐户,是获取标题和创建文章的抽象方法:
接下来,创建两个观察者:
最终通过主要课程进行测试:
最终操作结果如下:
根据JDK的Java.util包,观察者和主题对象需要观察观察者模式。观察者对象与我在第三章中的定义非常相似:
在此软件包中可观察到主题对象的名称,其中包含诸如添加观察者和删除观察者之类的操作。
观察者模式在不同的方案中仍然具有不同的名称,例如在本文的示例中,观察者模式称为Publish-subscripersource-listener模式,但是无论其如何称呼,其定义都是相同的。