package observer; public interface Observer { void update(Subject subject); } class ObserverA implements Observer{ private int mystate;//保持和目标者状态一致 @Override public void update(Subject subject) { // TODO Auto-generated method stub this.mystate = ((ConcreteSubject)subject).getState(); } public int getMystate() { return mystate; } public void setMystate(int mystate) { this.mystate = mystate; } } package observer; import java.util.ArrayList; import java.util.List; public class Subject { protected List<Observer> list = new ArrayList<Observer>(); public void register(Observer observer) { list.add(observer); } //通知所有观察者 public void notifyAllObserver() { for (Observer observer : list) { observer.update(this); } } } package observer; public class ConcreteSubject extends Subject{ private int state; public int getState() { return state; } //状态改变,就调用通知所有观察者方法 public void setState(int state) { this.state = state; this.notifyAllObserver(); } } package observer; public class Client { public static void main(String[] args) { //目标对象 ConcreteSubject sub = new ConcreteSubject(); //创建多个观察者 ObserverA o1 = new ObserverA(); ObserverA o2 = new ObserverA(); ObserverA o3 = new ObserverA(); //将这三个对象添加到subject容器中 sub.register(o1); sub.register(o2); sub.register(o3); //改变目标对象状态 sub.setState(1000); //查看观察者是否改变 System.out.println(o1.getMystate()); System.out.println(o2.getMystate()); System.out.println(o3.getMystate()); } }