1. 模式定义
观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/subscribe),它使一个在项目中经常使用的模式。
2. 模式各角色
Subject被观察者:定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。
Observer观察者:观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理。
ConcreteSubject具体的被观察者:定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
ConcreteObserver具体的观察者:每个观察在接收到消息后的处理反应是不同,各个观察者有自己的处理逻辑。
3. 模式类图
4. 通用代码
被观察者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public abstract class Subject {
public Vector<Observer> obsVector = new Vector<Observer>(); public void addObserver(Observer observer) { this.obsVector.add(observer); } public void delObserver(Observer observer) { this.obsVector.remove(observer); } public void notifyObservers() { for(Observer observer : this.obsVector) observer.update(); } }
|
具体被观察者
1 2 3 4 5 6 7 8 9 10
| public class ConcreteSubject extends Subject {
public void doSomething() { System.out.println("被观察者做点啥"); } }
|
观察者
1 2 3 4 5 6
| public interface Observer {
public void update(); }
|
具体观察者
1 2 3 4 5 6 7 8
| public class ConcreteObserver implements Observer {
public void update() { System.out.println("接收到信息,并进行处理!"); }
}
|
场景类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Client {
public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); Observer observer = new ConcreteObserver(); subject.addObserver(observer); subject.doSomething(); } }
|