前言
- 前阵子漫威退出WHAT IF ,里面存在一个观察者角色。他的职责就是每天监测多元宇宙发生的事情。在程序设计中我们同样有这么中角色。叫做观察者模式
场景
- 在程序开发中有的时候我们需要被告知。这个功能类似于发布订阅模式。发布订阅我们借助于第三方实现真正的消息下发,而观察者我们是直接下发给被监听者。实际上两者没有绝对的区分。在实现上概念也是模棱两可的。
开发
观察者
public interface Subject {
public List<Observer> observerList = new ArrayList<>();
default void registerObserver(Observer observer){
observerList.add(observer);
}
default void removeObserver(Observer observer){
observerList.remove(observer);
}
default void notifyObserver(Object object){
for (Observer observer : observerList) {
observer.update(object);
}
}
}
- 首先我们定义一个观察者的接口。提供了注册被观察者和删除被观察者。这里我们可以理解成发布和订阅这绑定关系的两个操作API . 剩下的就是发布消息。
消息接受
public interface Observer {
public void update(Object obj);
}
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")
}
}
- 下面我们就开始构建两个被观察者,将该被观察者注册到观察者的观察列表中。此时我们可以通过观察者给观察列表中的被观察者发送通知。从而达到我们的解耦需求
总结
- 设计模式整体是一种思想,经过设计模式的洗礼我们才能够变得更加的强大。跟紧我,带你思想革命!!!