“订阅对方,就是注册自己。”
设计逻辑
观察者模式很适合用“读者订阅信息”来说明,而书上更是直言“出版者 + 订阅者 = 观察者模式”。现假设有这样一个新闻机构p,它会以when、where、what的形式向订阅它的读者c们发送信息。实现一种一对多的依赖,这样一来p一旦改变状态,它的所有订阅者都会收到通知并更新。
注册
注册的逻辑是发生在新闻机构内部的,只有通过注册,它才能知道去更新哪些订阅者的信息。首先抽象出P:
|
|
接下来实现具体的“新闻机构”:
|
|
代码中,注册是ImlP的方法,通过该方法,将订阅者某c注册在自己的内部容器中。
订阅
首先抽象出订阅者:
|
|
接下来实现具体的订阅者:
|
|
这里用到了一个辅助类Message:
|
|
测试用例
|
|
设计模式的原则
这个例子我学习到的设计原则:
- 设计原则1:为了交互对象之间的松耦合设计而努力。