一.小结
- 定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
- 优点:1.观察者和被观察者是抽象耦合的 2.建立一套触发机制
- 缺点:1.观察者过多的情景下会降低效率 2.观察者不知道所观察的目标具体的变化,只是知道观察目标发生了变化。
- 常见的例子:许多基于观察者模式的事件库,如EventBus、Otto等;接口回调等
- 通用UML类图

二.例子
下面以文件系统监听文件变化为例:
-
被观察者
public class FileSystem { // 观察者集合 private List<IFileObserver> observers = new ArrayList<>(); public FileSystem() { } public void insertFile() { System.out.println("增加一个文件"); for (IFileObserver observer : observers) { observer.insertFile(); } } public void deleteFile() { System.out.println("删除一个文件"); for (IFileObserver observer : observers) { observer.deleteFile(); } } public boolean registerFileObserver(IFileObserver observer) { return observer != null && !observers.contains(observer) && observers.add(observer); } public boolean unregisterFileObserver(IFileObserver observer) { return observers.remove(observer); } -
观察者接口
public interface IFileObserver { void insertFile(); void deleteFile(); } -
观察者实现类
public class FileObserver implements IFileObserver { @Override public void insertFile() { System.out.println("监听到文件新增"); } @Override public void deleteFile() { System.out.println("监听到文件删除"); } } -
情景类
public class Client { public static void main(String[] args) { // 被观察者 FileSystem fileSystem = new FileSystem(); // 观察者 FileObserver fileObserver = new FileObserver(); // 注册监听 fileSystem.registerFileObserver(fileObserver); fileSystem.insertFile(); } }
本文介绍了一种常用的设计模式——观察者模式。该模式定义了对象间的一对多依赖关系,允许当一个对象状态发生变化时,所有依赖于它的对象都能自动收到通知并进行更新。文中通过一个文件系统监听文件变化的例子来具体说明观察者模式的应用。
5574

被折叠的 条评论
为什么被折叠?



