项目介绍:猎头或者HR往往会有很多职位信息,求职者可以在猎头或者HR那里注册,当猎头或者HR有新的岗位信息时,即会通知这些注册过的求职者。这是一个典型的观察者模式使用场景。
项目代码链接:
https://github.com/habren/JavaDesignPattern/commit/b35cb470512343c68deac5039394045b54c661f3
系统结构图:
静态关系结构图:
代码解析:
1.观察者接口
观察者接口定义了newJob方法,当有岗位信息时接收岗位信息。
2.具体观察者
具体观察者实现了观察者接口中的newJob方法,观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体现察者聚集,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。
3.抽象主题类
定义通知观察者接口,而且还定义了增加和删除观察者的方法。
4.具体主题类:
只需实现当有岗位信息时通知观察者接口,通知所有已注册的观察者。
观察者模式的优点
1.由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。
2.观察者模式支持广播通信。
观察者模式的缺点
1.如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
2.虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。