核心要点

  • SRP 单一职责:一个类只承担一个变化的原因,按职责拆分。

  • OCP 开闭、LSP 里氏替换:对扩展开放对修改关闭,子类必须能替换父类。

  • ISP 接口隔离、DIP 依赖倒置:用小接口,依赖抽象而非具体实现。

  • 总目标:高内聚低耦合,降低修改成本、提升可维护性与可测试性。

标准回答

逐条含义

  • SRP(单一职责):一个类只有一个引起它变化的原因,把不同职责拆到不同类。
  • OCP(开闭原则):对扩展开放、对修改关闭,新增需求靠加代码(多态/插件)而非改旧代码。
  • LSP(里氏替换):子类对象必须能无差别替换父类,不破坏原有约定。
  • ISP(接口隔离):用多个专用小接口替代臃肿大接口,调用方不依赖用不到的方法。
  • DIP(依赖倒置):高层与低层都依赖抽象,细节依赖抽象,常配合依赖注入。

目的

五者共同服务于高内聚、低耦合,使系统更易扩展、易测试、易维护。原则是指导而非教条,需结合成本权衡,避免为合规而过度设计。

常见误区

⚠️ 常见踩坑

把 SRP 的「职责」理解成「一个方法」导致类爆炸;混淆 DIP(依赖抽象)与简单的依赖注入框架。

追问

追问 1OCP 在实践中通常靠什么实现?

依靠抽象与多态:定义接口/抽象类,新增行为时实现新子类,而不修改既有代码。策略模式、模板方法、插件机制都是常见落地手段。

追问 2DIP 和依赖注入是一回事吗?

不是。DIP 是「依赖抽象」的设计原则;依赖注入(DI)是把依赖从外部传入的实现技术,是落实 DIP 的常用手段之一,但用了 DI 不等于满足了 DIP。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

📖 术语表

🛠️ AI 工具

  • Solid

    Solid.js 高性能前端框架,36K+ stars。采用细粒度响应式更新,没有虚拟 DOM 开销,编译时优化,是构建 AI 应用界面的轻量级高性能选择