观察者模式也叫做发布订阅模式,观察者模式定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新
1、观察者模式的主要角色
- Subject(被观察者):能够动态地管理观察者并通知观察者
- Observer(观察者):接收到消息后,对接收到的消息进行处理
- ConcreteSubject(具体被观察者):定义被观察者的业务逻辑,同时定义对哪些事件进行通知
- ConcreteObserver(具体观察者):每个观察者在接收到消息后的处理逻辑不通
2、实现观察者模式
//被观察者
public abstract class Subject {
//线程安全
private Vector<Observer> obsVerctor = new Vector<>();
//增加一个观察者
public void addObserver(Observer observer) {
obsVerctor.add(observer);
}
//删除一个观察者
public void delObserver(Observer observer) {
if (obsVerctor.indexOf(observer) >= 0)
obsVerctor.remove(observer);
}
//通知所有观察者
public void notifyObservers() {
obsVerctor.stream().forEach(observer -> {
observer.update();
});
}
}
//具体被观察者
public class ConcreteSubject extends Subject {
//具体的业务实现
public void doSomething() {
super.notifyObservers();
}
}
//观察者
public interface Observer {
void update();
}
//具体观察者
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("收到消息,并进行处理...");
}
}
public class Client {
public static void main(String[] args) {
//创建一个被观察者
ConcreteSubject subject = new ConcreteSubject();
//定义一个观察者
Observer observer = new ConcreteObserver();
//观察者观察被观察者
subject.addObserver(observer);
//观察者开始活动
subject.doSomething();
}
}
参考:
《设计模式之禅》