单一职责原则:指一个类应只有一个职责。它可提升代码的粒度与清晰度。
接口隔离原则(Interface Segregation Principle):设计者应该尽量使接口较小且易于管理。
依赖倒转原则(Dependence Inversion Principle):意味着高级模块不依赖于低级模块,二者都依赖于抽象。
里氏替换原则(Liskov Substitution Principle):指如果类型T1的每个对象都可以用类型T2的对象来替代,则T2是T1的子类型。
开闭原则(Open Closed Principle):意味着软件实体(如类、模块等)应对扩展开放,对修改关闭。
迪米特法则(Demeter Principle)又称为最少知道原则:指一个对象应该只与直接的朋友交互,了解最少的依赖。
合成复用原则(Composite Resuse Principle):鼓励使用合成或聚合的方式实现复用,而非继承。
目的:
- 代码重用性增强。
- 提高可读性。
- 增强可扩展性。
- 增强软件的可靠性。
- 使程序呈现出高内聚、低耦合的特性。
单一职责原则示例:
单一职责原则要求一个类只负责一项职责。如果类A承担了两个不相关的职责:职责1和职责2,当职责1发生变化时,可能会影响到职责2的执行,因此需要将类A拆分为A1和A2两个类,分别负责各自的职责。
当类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D时,如果接口Interface1对于类A和类C不是最小接口,那么类B和类D必须实现它们不需要的方法。按照隔离原则,应将接口拆分为独立的几个接口,类A和类C分别与它们需要的接口建立依赖关系。
依赖倒转原则说明:
- 高层模块不应依赖于低层模块的具体实现。
- 抽象不应依赖于细节,细节应依赖于抽象。
- 依赖倒转的核心是面向接口编程。
- 此原则基于抽象比细节更稳定的认识。
- 使用接口或抽象类定义规范,实现细节交由子类完成。
里氏替换原则应用:
在使用继承时,遵循里氏替换原则。这意味着如果在基类中修改了某个方法的行为,那么所有继承自该基类的子类都应该能够透明地使用修改后的行为。为了遵循这一原则,应尽量避免在子类中重写父类的方法。
开闭原则实践:
通过遵循开闭原则,软件实体可以对扩展开放、对修改关闭。例如,当需要增加一个新功能时,不需要修改现有代码,而是通过扩展现有模块或添加新模块来实现。这有助于保持代码的稳定性和可维护性。
迪米特法则的应用场景:
遵循迪米特法则可以降低类之间的耦合度。通过将输出学院员工的方法封装在学院员工管理类中,减少了其他类对学院员工管理类的依赖。这样设计使代码更加清晰、易于维护。
合成复用原则的体现:
在软件开发中,应尽量使用合成或聚合的方式实现代码复用,而非继承。这有助于减少代码之间的耦合度,提高代码的可维护性和可扩展性。