# 七大软件规划准则
# 规划形式-工厂形式
# 规划形式-单例形式
# 规划形式-原型形式
# 规划形式-策略形式
# 规划形式-职责链形式
# 规划形式-制作者形式
# 规划形式-深度剖析署理形式
# 规划形式-门面形式
# 规划形式-装饰器形式
# 规划形式-享元形式
# 规划形式-组合形式
# 规划形式-适配器形式
# 规划形式-桥接形式
# 规划形式-委派形式
# 规划形式-模板办法形式
# 规划形式-迭代器形式
# 规划形式-命令形式
# 规划形式-备忘录形式
# 规划形式-状况形式
# 规划形式-中介者形式
# 规划形式-解说器形式

调查者形式(Observer Pattern),又名发布-订阅(Publish/Subscribe)形式、模型-视图 Model/View ) 形式、源-监听器(Source/Listener)形式或隶属者(Dependents)形式。定义一种一对多的依靠关系,一个主题方针可被多个调查者方针一起监听,使得每当主题方针状况变化时,所 有依靠于它的方针都会得到告诉并被自动更新。属于行为型形式。

调查者形式的核心是将调查者与被调查者解耦,以类似于消息/广播发送的机制联动两者,使被调查 者的变动能告诉到感爱好的调查者们,从而做出相应的响应。比方咱们项目中常用的MQ、异步队列。

适用场景

这个形式咱们运用的就比较多了,比方消息分发平常咱们修正一个体系的东西的时分或许需要牵扯到多个体系一起修正,这个时分咱们就能够运用调查者形式。总结一下以下几点合适运用该形式:

  1. 当—个笼统模型包含两个方面内容,其间一个方面依靠于另一个方面;
  2. 其他一个或多个方针的变化依靠于另一个方针的变化;
  3. 完成类似广播机制的功能,无需知道详细收听者,只需分发广播,体系中感爱好的方针会自动接纳该广播;
  4. 多层级嵌套运用,构成一种链式触发机制,使得事情具备跨域(跨过两种调查者类型)告诉。

UML类图

设计模式-观察者模式
详细代码如下: 首先是被调查者它主要的功能是:

  1. 一个方针能够被多个调查者调查
  2. 方针供给对调查者注册和退订的保护
  3. 当方针的状况发生变化时,方针担任告诉所有注册的、有用的调查者

ISubject它的主要作用便是定义接口(主要是订阅和取消订阅以及告诉的接口)

public interface ISubject {
    void attach(IObserver observer);
    void detach(IObserver observer);
    void notifyObservers();
}

然后是详细的被调查方针ConcreteSubject这里主要完成详细办法

public class ConcreteSubject implements ISubject{
    private static final List<IObserver> observers = new ArrayList<>();
    @Override
    public void attach(IObserver observer) {
        observers.add(observer);
    }
    @Override
    public void detach(IObserver observer) {
        observers.remove(observer);
    }
    @Override
    public void notifyObservers() {
        for (IObserver observer : observers) {
            observer.update();
        }
    }
}

然后便是调查者,调查者的功能就比较少了便是完成办法等候被告诉

public interface IObserver {
    void update();
}
public class ConcreteObserver implements IObserver{
    @Override
    public void update() {
        System.out.println("被调查者更新了数据");
    }
}

最终再看一下客户端的运用:

public class Client {
    public static void main(String[] args) {
        ISubject subject = new ConcreteSubject();
        IObserver observer = new ConcreteObserver();
        subject.attach(observer);
        subject.notifyObservers();
    }
}

设计模式-观察者模式

调查者形式的优缺陷

优点:

  1. 调查者和被调查者是松耦合(笼统耦合)的,符合依靠倒置准则
  2. 分离了表明层(调查者) 和数据逻辑层(被调查者),并且建立了一套触发机制,使得数据的变 化能够响应到多个表明层上;
  3. 完成了一对多的通讯机制,支撑事情注册机制,支撑爱好分发机制,当被调查者触发事情时,只 有感爱好的调查者能够接纳到告诉。

缺陷:

  1. 假如调查者数量过多,则事情告诉会耗时较长;
  2. 事情告诉呈线性关系,假如其间一个调查者处理事情卡壳,会影响后续的调查者接纳该事情;
  3. 假如调查者和被调查者之间存在循环依靠,则或许造成两者之间的循环调用,导致体系崩溃。