设计模式之观察者模式

139 阅读1分钟

观察者模式( Obsever Pattern)

当对象间存在一对多关系,多个对象依赖于一个对象时,可以使用观察者模式。

一对多中的“一”是指,这一个对象的状态发生改变时,所有依赖于它的对象(这是一对多中的“多”)都会得到通知并自动更新。

一是指一个改变源头,多是指多个观察者要获知这一个源头的改变。

观察者模式重要的有以下几点:

  1. 必须有Observer抽象类或接口,这是一对多中“多”的父。“多”中的对象(即观察者对象)所属的类必须是继承或实现了Observer。

  2. 必须有Subject类,这是一对多中的“一”,观察者模式的核心代码在于Subject类中有一个ArrayList属性,用于存放观察者。

  3. 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);
           }
……
}