本篇文章给大家介绍异步非阻塞框架是如何实现的。
1.什么是观察者模式?
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
观察者模式(Observer Design Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会得到通知并自动更新。
说人话:也叫发布订阅模式,能够很好的解耦一个对象改变,自动改变另一个对象这种情况。
2.观察者模式定义
①Subject 被观察者
定义被观察者必须实现的职责, 它必须能够动态地增加、 取消观察者。它一般是抽象类或者是实现类, 仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。
②Observer观察者
观察者接收到消息后, 即进行update(更新方法) 操作, 对接收到的信息进行处理。
③ConcreteSubject具体的被观察者
定义被观察者自己的业务逻辑, 同时定义对哪些事件进行通知。
④ConcreteObserver具体的观察者
每个观察在接收到消息后的处理反应是不同, 各个观察者有自己的处理逻辑。
3.观察者模式通用代码
/** * 观察者 */ public interface Observer { // 更新方法 void update(); }
/** * 具体观察者 */ public class ConcreteObserver implements Observer{ @Override public void update() { System.out.println("接受到信息,并进行处理"); } }
/** * 被观察者 */ public abstract class Subject { // 定义一个被观察者数组 private List<Observer> obsList = new ArrayList<>(); // 增加一个观察者 public void addObserver(Observer observer){ obsList.add(observer); } // 删除一个观察者 public void delObserver(Observer observer){ obsList.remove(observer); } // 通知所有观察者 public void notifyObservers(){ for (Observer observer : obsList){ observer.update(); } } }
/** * 具体被观察者 */ public class ConcreteSubject extends Subject{ // 具体的业务 public void doSomething(){ super.notifyObservers(); } }