public class Subject { private List<Observer> observers = new ArrayList<>(); private String state; public String getState() { return state; } public void setState(String state) { this.state = state; //状态发生变化 notifyAllObserver(); } public void attach(Observer observer) { observers.add(observer); } public void detach(Observer observer) { observers.remove(observer); } public void notifyAllObserver() { observers.forEach(Observer::update); }}public interface Observer { void update();}public class ObserverImpl implements Observer { private Subject subject; private String name; public ObserverImpl(Subject subject, String name) { this.subject = subject; this.name = name; this.subject.attach(this); } @Override public void update() { System.out.printf("观察者 %s 状态变化为 %s", name, subject.getState()); System.out.println(); }public class ObserverApp { public static void main(String[] args) { //定义一个主题 Subject subject = new Subject(); 、 //定义观察者 new ObserverImpl(subject,"OneSubject"); new ObserverImpl(subject,"SecondSubject"); //数据变更 subject.setState("new state"); }}输出:观察者 oneSubject 状态变化为 new state观察者 SecondSubject 状态变化为 new state观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体实现,从而使得各自带变化都不会影响另外一边的变化。
