观察者模式
观察者模式(Observer Design Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会得到通知并自动更新。
观察者模式通用代码
/** * 观察者 */ 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(); } }
public class ObserverClient { public static void main(String[] args) { // 创建一个被观察者 ConcreteSubject subject = new ConcreteSubject(); // 定义一个观察者 Observer observer = new ConcreteObserver(); // 观察者观察被观察者 subject.addObserver(observer); subject.doSomething(); } }
观察者模式优点
①、观察者和被观察者之间是抽象耦合
不管是增加观察者还是被观察者都非常容易扩展,在系统扩展方面会得心应手。
②、建立一套触发机制
被观察者变化引起观察者自动变化。但是需要注意的是,一个被观察者,多个观察者,Java的消息通知默认是顺序执行的,如果一个观察者卡住,会导致整个流程卡住,这就是同步阻塞。
所以实际开发中没有先后顺序的考虑使用异步,异步非阻塞除了能够实现代码解耦,还能充分利用硬件资源,提高代码的执行效率。
另外还有进程间的观察者模式,通常基于消息队列来实现,用于实现不同进程间的观察者和被观察者之间的交互。
观察者模式应用场景
①、关联行为场景。
②、事件多级触发场景。
③、跨系统的消息交换场景, 如消息队列的处理机制。
标签:Observer,observer,void,观察者,模式,public From: https://www.cnblogs.com/happy12123/p/16821293.html