观察者模式是一种被广泛应用的设计模式,用于在对象之间构建松散耦合关系。在观察者模式中,当一个对象的状态发生改变时,它通知它所依赖的所有对象,使得这些对象能够自动更新自己的状态。本文将从多个角度探讨观察者模式在Java中的实现。
实现方式
在Java中,观察者模式的实现可以采用Java自带的Observer和Observable接口。Observable类用于存储观察者对象的列表,接口Observer定义了被观察对象与观察者对象之间的通信协议。
Observable类中的主要方法包括:
- addObserver(Observer o):添加观察者对象
- deleteObserver(Observer o):删除观察者对象
- notifyObservers(Object arg):通知观察者对象状态发生改变
- setChanged():标记被观察对象状态发生改变
Observer接口中的主要方法是:
- update(Observable o, Object arg):当被观察对象状态发生改变时,观察者对象调用此方法
示例代码:
观察者实现类:
```
class ConcreteObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println(String.format("观察到对象发生变化,新状态为:%s", arg));
}
}
```
被观察者实现类:
```
class ConcreteObservable extends Observable {
private int state;
public int getState() {
return state;
}
public void setState(int newState) {
state = newState;
setChanged();
notifyObservers(state);
}
}
```
使用示例:
```
ConcreteObservable observable = new ConcreteObservable();
ConcreteObserver observer1 = new ConcreteObserver();
ConcreteObserver observer2 = new ConcreteObserver();
observable.addObserver(observer1);
observable.addObserver(observer2);
observable.setState(1);
observable.deleteObserver(observer2);
observable.setState(2);
```
观察者模式的优势
采用观察者模式具有以下优势:
1. 支持松散耦合关系
观察者模式解除了被观察对象与观察者对象之间的直接联系,使得对象之间的关系更为灵活,减少了对象之间的依赖。
2. 容易扩展
当需要添加新的观察者对象时,只需要通过addObserver()方法添加到被观察对象中即可。同时也可以很容易地对观察者对象进行扩展。
3. 支持广播通信
当被观察对象状态发生改变时,观察者对象能够自动更新状态,实现了对象之间的广播通信。
应用场景
观察者模式被广泛应用于以下场景:
1. GUI程序设计
当用户事件发生时,GUI程序通常会采用观察者模式来处理。
2. 数据库设计
数据库中的触发器(Trigger)机制可以被视为观察者模式的一种实现方式。
3. 系统设计
观察者模式能够使系统模块间解耦,提高系统的可维护性和可扩展性。
扫码咨询 领取资料