当应用程式在执行时。使用者将因 view 做出相应的更新而看见 model 所产生的变更。
如图:
举例说明:
package design.observer; /** * 文件名称:design.singleton.Singleton.java * 创建人:Fei Wong * 创建时间: 2012-06-20 * 电子邮箱:[email protected] * 说明:观察者 * */ public interface Observer { void update(NumberGenerator generator); } package design.observer; import java.util.ArrayList; import java.util.Iterator; /** * 文件名称:design.singleton.Singleton.java * 创建人:Fei Wong * 创建时间: 2012-06-20 * 电子邮箱:[email protected] * 说明:产生数值的抽象类 * */ public abstract class NumberGenerator { private ArrayList<Observer> observers = new ArrayList<Observer>(); //存储Observer /** 添加观察者*/ public void addObserver(Observer observer) { observers.add(observer); } /** 删除观察者*/ public void delObserver(Observer observer) { observers.remove(observer); } /** 通知所有观察者*/ public void notifyObservers() { Iterator<Observer> it = observers.iterator() ; while(it.hasNext()) { Observer o =(Observer) it.next(); o.update(this);//this相当于上面提到的邮局名 } } public abstract int getNumber();//获取数字 public abstract void generate();//产生数字 } package design.observer; import java.util.ArrayList; import java.util.Iterator; /** * 文件名称:design.singleton.Singleton.java * 创建人:Fei Wong * 创建时间: 2012-06-20 * 电子邮箱:[email protected] * 说明:产生数值的抽象类 * */ public abstract class NumberGenerator { private ArrayList<Observer> observers = new ArrayList<Observer>(); //存储Observer /** 添加观察者*/ public void addObserver(Observer observer) { observers.add(observer); } /** 删除观察者*/ public void delObserver(Observer observer) { observers.remove(observer); } /** 通知所有观察者*/ public void notifyObservers() { Iterator<Observer> it = observers.iterator() ; while(it.hasNext()) { Observer o =(Observer) it.next(); o.update(this);//this相当于上面提到的邮局名 } } public abstract int getNumber();//获取数字 public abstract void generate();//产生数字 } package design.observer; /** * 文件名称:design.singleton.Singleton.java * 创建人:Fei Wong * 创建时间: 2012-06-20 * 电子邮箱:[email protected] * 说明:以数字表示观察者的类 * */ public class NumberObserver implements Observer { @Override public void update(NumberGenerator generator) { System.out.println("NumberObserver:" + generator.getNumber()); try { Thread.sleep(1000 * 3); // 为了能清楚的看到输出,休眠3秒钟。 } catch (InterruptedException e) { e.printStackTrace(); } } } package design.observer; /** * 文件名称:design.singleton.Singleton.java 创建人:Fei Wong 创建时间: 2012-06-20 * 电子邮箱:[email protected] 说明:以数字表示观察者的类 */ public class SymbolObserver implements Observer { @Override public void update(NumberGenerator generator) { System.out.print("SymbolObserver:"); int count = generator.getNumber(); for (int i = 0; i < count; i++) { System.out.print("*^_^* "); } System.out.println(); try { Thread.sleep(1000 * 3); } catch (InterruptedException e) { e.printStackTrace(); } } } package design.observer; /** * 文件名称:design.singleton.Singleton.java * 创建人:Fei Wong * 创建时间: 2012-06-20 * 电子邮箱:[email protected] * 说明:观察者模式定义了对象之间的一对多的依赖关系,当一个对象的状态发生改变时,所有它的依赖对象将被自动通知并更新 */ public class Main { public static void main(String[] args) { //实例化数字产生对象 NumberGenerator generator = new RandomNumberGenerator(); //实例化观察者 Observer observer1 = new NumberObserver(); Observer observer2 = new SymbolObserver(); //注册观察者 generator.addObserver(observer1); generator.addObserver(observer2); generator.generate(); //产生数字 } }