应通过抽象和多态设计可扩展类结构,使系统对扩展开放、对修改关闭。例如定义Shape接口,各类实现getArea(),新增图形时只需添加新类,无需修改原有代码;结合依赖倒置与工厂模式,将变化隔离,核心逻辑保持稳定,提升可维护性与复用性。
设计可扩展的类结构并实践开闭原则(Open/Closed Principle),关键在于让系统对扩展开放、对修改关闭。这意味着你可以在不改动现有代码的前提下,通过新增代码来添加新功能。这不仅能降低引入 bug 的风险,还能提升代码的可维护性和可复用性。
理解开闭原则的核心思想
开闭原则是面向对象设计的五大原则之一,由 Bertrand Meyer 提出。它的核心是:
- 类、模块、函数应该能够扩展其行为,而无需修改其源代码
- 新增功能通过添加新类或新实现来完成,而不是修改已有逻辑
例如,如果你有一个计算图形面积的功能,当新增一种图形时,你不应修改原有的面积计算逻辑,而是通过扩展方式支持新图形。
使用抽象和多态实现可扩展性
通过定义抽象基类或接口,将公共行为抽象出来,具体实现由子类完成。这样,新增类型只需实现接口,无需改动调用方代码。
示例:图形面积计算
- 定义一个 Shape 抽象类或接口,包含 getArea() 方法
- Circle、Rectangle 等类继承 Shape 并实现各自逻辑
- 当需要新增 Triangle 时,只需新增类并实现 Shape,原有代码无需修改
调用方只依赖 Shape 抽象,不关心具体类型,从而实现对扩展开放、对修改关闭。
利用依赖倒置和依赖注入增强灵活性
高层模块不应依赖低层模块,二者都应依赖抽象。通过依赖注入,可以在运行时决定使用哪个具体实现。
- 将策略、处理器、服务等通过接口注入,而不是硬编码具体类
- 配置或工厂决定实例化哪个子类
- 新增实现时,只需注册新类,不修改已有业务逻辑
例如日志系统:定义 Logger 接口,有 FileLogger、DbLogger 等实现。切换或新增日志方式时,只需更换实现类,核心逻辑不变。
合理使用设计模式支持扩展
一些经典模式天然支持开闭原则:
这些模式帮助你把变化点隔离,让核心结构稳定,扩展更加自然。
基本上就这些。关键是提前识别可能变化的部分,用抽象隔离变化,让新增功能像插件一样接入。结构清晰了,维护就轻松了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END