设计模式 ----Observer 模式(对象的行为模式)
解决问题: 一个软件系统常常要求在某个对象的状态发生变化的时候 ,某些其他的对象做出相应的改变 。
同样能实现此功能: 做到这一点的设计方案有很多
比较: 观察者模式使系统能够易于复用 (低耦合的设计方案)。观察者模式是满足这一要求的各种设计方案中最重要的一种 。
一、简介
又叫发布 - 订阅模式、模型 - 视图模式、源 - 监听器模式、从属者模式。
观察者模式定义了一种一对多的依赖关系,让多个观察者对需昂同时监听某一个主题对象。这个主题对象 在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
二、观察者模式的结构
1 、类图
类图(一)
传统模式类图
类图(二)
Java 语言提供的观察者模式的支持属于此种结构。
传统实现方案
2 、角色
抽象主题角色(抽象类或者接口)((观察者对象的聚集);添加、删除观察者对象;更新(执行聚集中 所有观察者对象的 update 方法))
抽象观察者角色(更新接口)
具体主题角色
具体观察者角色
3 、另一种实现方案
聚集管理方法本身就是所有具体主题角色所共有的,因此将这些方法连同聚集本身可以移植到抽象主题角 色中。同样,由于 notifyObserver() 方法依 赖于聚集对象,也可以移植到抽象主题角色中。
三、 Java 语言提供的对观察者模式的支持
在 Java 语言的 java.util 库里面,提供了一个 Observable 类以及一个 Observer 接口,构成 Java 语言对观察者模式的支持。
四、优缺点
优点
1、 观察者模式在被观察者和观察者之间建立一个抽象的耦合。
2、 观察者模式支持广播通信。
缺点
1、 很多观察者,都通知到会花费很多时间。
2、 被观察者之间循环依赖,可能导致系统崩溃。
3、 通知通过另外的县城进行异步投递的话,系统必须保证投递是以自恰的方式进行。
4、 观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。