观察者模式仅需单个Observer时Subject是否需要维护Observer集合?
观察者模式单观察者场景问题解答
是否需要维护Observer集合?
不需要。观察者模式的核心设计目标是实现Subject和依赖它的Observer之间的松耦合,从来没有强制要求必须支持多观察者场景。如果你确定当前及可预见的未来都只会有一个Observer,完全可以简化实现,直接在Subject中存储单个Observer的引用即可,额外维护集合反而会增加不必要的冗余代码。
只有一个Observer的实现算不算观察者模式?
当然算。你在教程、示意图里看到的多Observer示例,只是为了直观展示该模式的能力上限,并不是判定是否符合模式定义的准入条件。
判定一个实现是不是观察者模式,核心看两个核心特征,和Observer的数量完全无关:
Observer不需要主动轮询Subject的状态,Subject状态变更时会主动推送通知Subject和Observer之间是抽象耦合,Subject不需要感知Observer的具体业务实现,只需要调用其提前约定好的通知接口即可
举个常见的实际场景:你做文件上传功能时,上传器作为Subject,只有上传进度条这一个Observer,只要两者通过抽象通知接口解耦,没有硬编码具体实现逻辑,哪怕你没有用集合存储观察者,这也是标准的观察者模式实现,完全没必要为了强行贴合通用示例写个只存一个元素的集合。
内容的提问来源于stack exchange,提问作者Omar Khaled
相关产品推荐
相关产品推荐

