希赛考试网
首页 > 软考 > 软件设计师

观察者模式符合开闭原则吗知乎

希赛网 2024-06-06 12:54:01

观察者模式符合开闭原则吗?

观察者模式是一种常见的设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象,当主题对象的状态发生改变时,会通知所有的观察者对象,并且观察者对象能够自动取得主题对象的最新状态,从而实现解耦的变化通知机制。而开闭原则又是面向对象设计中的重要原则之一,它提出软件实体(类、模块、函数等)应该对扩展开放,对修改关闭的原则。

那么,观察者模式符合开闭原则吗?我们从三个角度分析这个问题。

第一,从设计模式的角度分析。设计模式是一种被广泛接受的良好实践,能够提高代码的复用性和扩展性。由于观察者模式主要解决对象之间的发布-订阅关系,因此对于开闭原则,我们应该从主题对象、观察者对象两方面去考虑。

首先,主题对象应该对扩展开放。如果有新的观察者对象需要加入,主题对象应该支持动态增加观察者对象而不影响已有的观察者对象。在观察者模式中,主题对象会维护一个观察者列表,在主题对象的状态发生改变时,会通知所有观察者对象进行相应的处理。因此,只要主题对象对观察者对象的增加和删除做了良好的抽象,就能够在不修改主题对象代码的情况下进行扩展。

其次,观察者对象应该对修改关闭。观察者对象只需要在主题对象状态发生改变时做相应的处理即可,不需要对主题对象进行修改。同时,观察者对象的数量和类型可能随时发生变化,主题对象并不需要知道具体的观察者对象,这也保证了代码的扩展性。

因此,从设计模式的角度来看,观察者模式符合开闭原则。

第二,从实际应用的角度分析。观察者模式广泛应用于Java Swing、Android等GUI编程框架中,用于实现事件监听器的注册和响应,同时也用于实现消息传递机制、异步通知等场景。在实际应用时,观察者模式的优点也体现得比较明显:解耦、扩展性好、可维护性高等。

我们以Android的广播机制为例,广播发送者是主题对象,广播接收者是观察者对象。主题对象会在必要的时候启动一个广播组件,向所有观察者对象发送广播通知。观察者对象则需要注册广播监听器,在广播发生时接收广播通知,并做相应的处理。由于广播接收者的数量和类型不确定,主题对象不需要知道具体的观察者对象,这也保证了代码的扩展性。

因此,从实际应用的角度来看,观察者模式符合开闭原则。

第三,从代码质量的角度分析。开闭原则强调系统的稳定性、可扩展性和可维护性,而观察者模式则保证了系统的灵活性、可复用性和减少代码冗余。观察者模式使用接口抽象观察者对象和主题对象之间的联系,实现了模块之间的松耦合,易于扩展和修改。

在代码质量的角度上,观察者模式也符合开闭原则。

综上所述,观察者模式符合开闭原则。观察者模式的扩展性、松耦合性以及对修改关闭的原则,保证了代码的稳定性和可扩展性,在实际应用中也体现出较好的性能表现。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件