一. 概念Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
二. 角色抽象主题(Subject)角色:主题角色把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。 抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象,在具体主题的内部状态改变时,给所有登记过的观察者发出通知。 具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。
三. 实现由于java提供了观察者模式的实现,这里就直接使用java的Api来实现,这里模拟家长对孩子下达命令。
Test.java
public static void main(String[] args) { Children c1 = new Children(m); Children c2 = new Children(m); 这里Mother是具体主题角色,Children是具体观察者角色。
Children.java public class Children implements Observer {
public Children(Mother m){ m.addObserver(this); } @Override public void update(Observable o, Object arg) { String info = ((Mother)o).getInfo(); System.out.println("已经收到命令:" + info); }
} 实现了Observer接口,是具体观察者角色。
Mother.java public class Mother extends Observable { private String info = "";
public String getInfo() { return info; }
public void setInfo(String info) { if(!this.info.equals(info)){ this.info = info; setChanged(); } notifyObservers(); } } 继承了Observalbe类,是具体主题角色。
|