观察者模式的问题及其相关内容

这里写自定义目录标题

    • 原理
    • 缺点
      • 被观察者的特点
      • 观察者的特点
    • 另一种解耦实现
    • SpringBoot场景

原理

https://www.runoob.com/design-pattern/observer-pattern.html

缺点

1个被观察者,多个观察者。

被观察者的特点

被观察者要维护观察者列表 :

private List observers = new ArrayList();

被观察者更新时调用自己的一个方法如setState,然后通知所有观察者执行他自己的方法(行为)。
public void setState(int state) {
this.state = state;
notifyAllObservers();
}

观察者的特点

初始化的时候需要引用观察者(这样的话,观察者能知道被观察者的所有属性行为);然后让被观察者那里登记自己。

   public BinaryObserver(Subject subject){
     this.subject = subject;
     this.subject.attach(this);
  }

==============

另一种解耦实现

搞一个消息中心 EventCenter.java,比如被观察者为登录系统,系统登录时通知下游观察者做一些事情,可以EventCenter中实现如下方法。

	public static void doLogin(String loginType, Object loginId, String tokenValue, LoginModel loginModel) {
		for (Listener listener : listenerList) {
			listener.doLogin(loginType, loginId, tokenValue, loginModel);
		}
	}

被观察者要发特定消息(比如登录)时,直接调用,被观察者就没事儿了

EventCenter.doLogin(loginType, id, tokenValue, loginModel);

很多观察者(很多类)可以都实现Listener接口,并且注册到EventCenter(加到listenerList里面),这样就能执行观察者自己的行为了。

这样的问题是很多观察者只能通过参数获取到被观察者的部分信息。但可以搞很多被观察者。

SpringBoot场景

可以定义个map让子类自动注入,都不用手动注册到EventCenter了。

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形

你可能感兴趣的:(观察者模式,java,开发语言)