软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量软件质量的质量属性,软件可维护性是指软件能够被理解、改正、适应及拓展的难易程度,软件的可复用性是指软件能够被重复使用的难易程度。
面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则,但并不是强制性的。
设计原则名称 | 定义 | 使用频率 |
---|---|---|
单一职责原则 (Single Responsibility Principle, SRP) | 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中 | ★★★★☆ |
开闭原则 (Open-Closed Principle, OCP) | 软件实体应对拓展开发,对修改关闭 | ★★★★★ |
里氏替换原则 (Liskov Substitution Principle, LSP) | 所有引用基类的地方必须能透明地使用其子类的对象 | ★★★★★ |
依赖倒转原则 (Dependence Inversion Principle, DIP) | 高层模块不应该依赖底层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象 | ★★★★★ |
接口隔离原则 (Interface Segregation Principle, ISP) | 客户端不应该依赖那些它不需要的接口 | ★★☆☆☆ |
合成复用原则 (Composite Reuse Principle, CRP) | 优先使用对象组合,而不是继承来达到复用的目的 | ★★★★☆ |
迪米特法则 (Law of Demeter, LoD) | 每一个软件单位对其他的单元都只有最少的知识,而且局限于那些与本单位密切相关的软件单位 | ★★★☆☆ |