观察者模式( Obsever Pattern)
当对象间存在一对多关系,多个对象依赖于一个对象时,可以使用观察者模式。
一对多中的“一”是指,这一个对象的状态发生改变时,所有依赖于它的对象(这是一对多中的“多”)都会得到通知并自动更新。
一是指一个改变源头,多是指多个观察者要获知这一个源头的改变。
观察者模式重要的有以下几点:
-
必须有Observer抽象类或接口,这是一对多中“多”的父。“多”中的对象(即观察者对象)所属的类必须是继承或实现了Observer。
-
必须有Subject类,这是一对多中的“一”,观察者模式的核心代码在于Subject类中有一个ArrayList属性,用于存放观察者。
-
Observer的子类或实现类的构造方法可以接收一个 Subject对象作为参数,表明这个对象要观察哪一个subject对象,构造方法中必须包含将自己加入到subject对象的观察者列表中这一步骤,这样每个subject对象的ArrayList数组中都放着依赖于自己的观察者,就是一对多,当subject对象发生改变时,可以通过foreach循环遍历数组,来通知到依赖于它的每一个观察者。
部分参考代码如下
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers =
new ArrayList<Observer>();
public void attach(Observer observer){
observers.add(observer);
}
……
}
public class A extends Observer{
public A(Subject subject){
//将自身加入subject对象的观察者列表
subject.attach(this);
}
……
}