观察者设计模式
2018, Apr 18
观察者设计模式
观察者模式:一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新
- 优点:建立一套触发机制
- 缺点:通知默认是顺序执行,一个观察者卡壳,会影响整体的执行效率
-
Subject被观察者:必须实现的职责是管理(增加或减少)观察者并通知观察者。
public abstract class Subject { // 定义一个观察者数组 private Vector<Observer> obsVector = new Vector<Observer>(); // 增加一个观察者 public void addObserver(Observer obs) { this.obsVector.add(obs); } // 减少一个观察者 public void delObserver(Observer obs) { this.obsVector.remove(obs); } // 通知所有观察者 public void notifyObservers() { for (Observer obs : this.obsVector) { obs.update(); } } }
-
Observer观察者:观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理。
public interface Observer { //更新方法 public void update(); }
-
ConcreteSubject具体的被观察者:定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
public ConcreteSubject extends Subject {
public void doSomething() {
/*
* 业务逻辑代码。。。。。
*/
// 通知所有被观察者
super.notifyObservers();
}
}
-
ConcreteObserver具体的观察者:每个观察在接收到消息后的处理反应是不同,各个观察者有自己的处理逻辑。
public class ConcreteObserver implements Observer { //实现更新方法 public void update() { System.out.println("接收到信息,并进行处理!"); } }
测试函数
public class Client {
public static void main(String[] args) {
//创建一个被观察者
// 因为subject.doSomething方法,只有子类才有,所以声明的类型为ConcreteSubject
ConcreteSubject subject = new ConcreteSubject();
//定义一个观察者
Observer obs= new ConcreteObserver();
// 观察者 观察 被观察者
subject.addObserver(obs);
// 被观察者开始活动了
subject.doSomething();
}
}