设计模式【观察者模式】+ 万事我掌控

107 阅读2分钟

前言

  • 前阵子漫威退出WHAT IF ,里面存在一个观察者角色。他的职责就是每天监测多元宇宙发生的事情。在程序设计中我们同样有这么中角色。叫做观察者模式

场景

  • 在程序开发中有的时候我们需要被告知。这个功能类似于发布订阅模式。发布订阅我们借助于第三方实现真正的消息下发,而观察者我们是直接下发给被监听者。实际上两者没有绝对的区分。在实现上概念也是模棱两可的。

开发

观察者

public interface Subject {
    public List<Observer> observerList = new ArrayList<>();
​
    /**
     * 注册观察者
     * @param observer
     */
    default void registerObserver(Observer observer){
        observerList.add(observer);
    }
​
    /**
     * 删除观察者
     * @param observer
     */
    default void removeObserver(Observer observer){
        observerList.remove(observer);
    }
​
    /**
     * 发布消息
     * @param object
     */
    default void notifyObserver(Object object){
        for (Observer observer : observerList) {
            observer.update(object);
        }
    }
}
  • 首先我们定义一个观察者的接口。提供了注册被观察者和删除被观察者。这里我们可以理解成发布和订阅这绑定关系的两个操作API . 剩下的就是发布消息。

消息接受

  • 剩下的就是我们的被观察者。我们同样定义一个接口
public interface Observer {
    public void update(Object obj);
}
  • 其中的update就是对接收到的数据进行处理。
public class UserOne implements Observer {
    private String uuid = UUID.randomUUID().toString();
    @Override
    public void update(Object obj) {
        System.out.println("我是用户("+uuid+"):接收到信息:" + obj);
    }
}
  • 这里我们就简单的输出下内容吧

测试

public class Test {
    public static void main(String[] args) {
        UserOne one = new UserOne();
        UserOne two = new UserOne();
        Subject webChat = new WeChatSubject();
        webChat.registerObserver(one);
        webChat.registerObserver(two);
        webChat.notifyObserver("观察者模式微信主题发布消息了");
        webChat.removeObserver(one);
        webChat.notifyObserver("观察者模式微信主题发布消息2");
    }
}
  • 下面我们就开始构建两个被观察者,将该被观察者注册到观察者的观察列表中。此时我们可以通过观察者给观察列表中的被观察者发送通知。从而达到我们的解耦需求

总结

  • 设计模式整体是一种思想,经过设计模式的洗礼我们才能够变得更加的强大。跟紧我,带你思想革命!!!