项目中的观察者模式

背景

目前开发的项目中,出现过许多次观察者模式,且其和普通的观察者模式有些许不同,为了理解而进行整理。

项目中的观察者模式

类图:

项目中的观察者模式

流程:脚本订阅消息队列消息,创建Subject,传送解析后的消息给所有观察者,观察者根据消息类型判断是不是自己关心的消息,是的话就把自己注册到Subject中;Subject的notifyObservers方法让观察者格式化消息后doUpdate(如更新db、发送建库消息给消息队列等)。

普通的观察者模式流程:Subject创建出来后,对具体的Subject感兴趣的观察者会注册在它上面,Subject发生变化时唤醒观察者执行操作。

项目中的观察者模式和普通观察者模式的区别在于:项目中的观察者模式的Subject只有一个,发给每个观察者的消息都是一样的,由观察者来决定是否要注册到该Subject上;普通观察者模式的Subject有多个,注册在某个Subject上的观察者一定是对变化感兴趣的,不然就没必要注册。

为什么项目中的观察者要这么设计呢?如果按照普通观察者模式来设计,由于项目中有100多个维度的数据,那么需要创建100多个具体的Subject,且其订阅的消息队列需要分出100多个不同topic或queue,开发和维护成本很高,所以选择只创建一个Subject,由观察者(每个观察者关注多种类型)决定是否进行注册。

总结

设计模式并不是一成不变的,根据项目的需要进行调整,即所谓的因地制宜、因材施教。

posted @ 2023-04-15 21:12  sjmuvx  阅读(9)  评论(0编辑  收藏  举报