先建立一个接口和两个实现类
package com.ceshi14; public interface Observer { public void update(); }
package com.ceshi14; public class Observer1 implements Observer { @Override public void update() { System.out.println("观察者1已接收"); } }
再新建一个接口:
package com.ceshi14; public interface Subject { /*增加观察者*/ public void add(Observer observer); /*删除观察者*/ public void del(Observer observer); /*通知所有的观察者*/ public void notifyObservers(); /*自身的操作*/ public void operation(); }
其中通知所有的观察者的就是观察者模式。
具体实现:
package com.ceshi14; import java.util.Enumeration; import java.util.Vector; public abstract class AbstractSubject implements Subject{ private Vector<Observer> vector = new Vector<Observer>(); @Override public void add(Observer observer) { vector.add(observer); } @Override public void del(Observer observer) { vector.remove(observer); } @Override public void notifyObservers() { Enumeration<Observer> enumo = vector.elements(); while(enumo.hasMoreElements()){ enumo.nextElement().update(); } } }
package com.ceshi14; public class MySubject extends AbstractSubject{ @Override public void operation() { System.out.println("更新自身!"); notifyObservers(); } }
在这里,更新自身的同时通知其他观察者;
package com.ceshi14; public class ObserverTest { public static void main(String[] args) { Subject sub = new MySubject(); Observer1 observer1 = new Observer1(); Observer2 observer2 = new Observer2(); sub.add(observer1); sub.add(observer2); sub.operation(); sub.del(observer2); sub.operation(); } }
结果:
只是将观察者关联起来,有点类似于socket的群聊,发出一句话然后其他人都能收到
这里其他人就算是观察者。这就是观察者模式