面向对象七大设计原则总结

211 阅读4分钟

这是我参与更文挑战的第27天,活动详情查看: 更文挑战

设计原则名称定 义使用频率
单一职责原则(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)一个软件实体应当尽可能少地与其他实体发生相互作用★★★☆☆

开闭原则

  • 开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则
  • 抽象化是开闭原则的关键

单一职责原则

  • 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小
  • 单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责  并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验

里式替换原则

  • 在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来  则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象
  • 在程序中尽量使  用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象

依赖倒转原则

  • 面向对象设计的主要实现机制之一,它是系统抽象化的具体实现
  • 依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入

接口分离原则

  • 每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干
  • 接口仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口
  • 在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便

合成复用原则

  • 复用时要尽量使用组合/聚合关  系(关联关系),少用继承
  • 由于组合或聚合关系可以将已有的对象(也可称为成员对象)纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能,这样做可以使得成员对象的内部实现细节对于新对象不可见,所以这种复用又称为“黑箱”复用,相对继承关系而言,其耦合度相对较低,成员对象的变化对新对象的影响不大

迪米特原则

  • 迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系
  • 应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用

总结: 这 7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。其中,【开闭原则】是总纲,  它告诉我们要【对扩展开放,对修改关闭】;【里氏替换原则】告诉我们【不要破坏继承体系】;【依赖倒置原则】  告诉我们要【面向接口编程】;【单一职责原则】告诉我们实现【类】要【职责单一】;【接口隔离原则】告诉我们  在设计【接口】的时候要【精简单一】;【迪米特法则】告诉我们要【降低耦合度】;【合成复用原则】告诉我们要  【优先使用组合或者聚合关系复用,少用继承关系复用】