七大设计原则

七大设计原则:

  实际开发中,并不是一定要求所有代码都强制遵循设计原则,需要考虑人力、时间、质量,要在适当的场景遵循设计原则,能够根据实际情况平衡取舍,帮助我们设计更家优雅的代码结构。

  开闭原则
  依赖倒置原则
  单一职责原则
  接口隔离原则
  迪米特法则
  里氏替换原则
  合成复用原则

开闭原则:Open-Closed Principle, OCP

  对扩展开放、对修改关闭
  强调用抽象构建框架,用实现扩展细节

  生活案例:弹性工作时间,规定每天工作8个小时,早来早走,晚来晚走
  程序案例:
    版本更新,尽可能不修改源码,但可以增加新功能
    商超各种商品定价、优惠活动

  design.principle.openclose

依赖倒置原则:Dependence-Inversion Principle, DIP

  高层模块不依赖底层模块,二者都应该依赖其抽象
  抽象不应该依赖细节,细节应该依赖抽象

  依赖注入三种注入方式:
  传参方式、构造器方式、Setter方式(一般用于全局单例)

  切记:以抽象为基准比以细节为基准搭建起来的架构要稳定得多,因此在拿到需求之后,要面向接口编程,先顶层再细节来设计代码结构

  design.principle.dependencyinversion

单一职责原则:Simple-Responsibility Principle, SRP

  一个ClassinterfaceMethod 只负责一项职责

  不要存在大于一个导致功能变更的原因,降低变更引起的风险

  design.principle.simpleresponsibility

接口隔离原则:Interface-Segregation Principle, ISP

  用多个专门的接口,而不使用单一的总接口,
  【客户端不应该依赖它不需要的接口】

  一个类对一类的依赖应该建立再最小的接口之上
  建立单一的接口,不要建立庞大臃肿的接口
  尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)

  design.principle.interfacesegregation

迪米特法则:Law of Demeter, LOD
  最少知道原则:Least Knowledge Principle, LKP

  尽量降低类与类之间的耦合
  强调只和朋友交流,不和陌生人说话

  design.principle.demeter

里氏替换原则:Liskov-Substitution Principle, LSP

  只存在父类与子类之间,用于约束继承泛滥

  子类【可以扩展】父类功能,但【不能改变】父类原有的功能

  子类可以实现父类的抽象方法,但不能覆盖父类的抽象方法
  子类中可以增加自己特有的方法 当子类的方法实现父类的方法时(重写/重载或实现抽象方法):
  方法的前置条件(即方法的入参)要比父类方法的入参更宽松?
  方法的后置条件(即方法的返回值)要比父类更严格或相等?

  design.principle.liskovsutiution

合成复用原则:Composite/Aggregate Reuse Principle, CARP

  尽量使用对象组合(has-a)/ 聚合(contanis-a),而不是继承关系达到软件复用的目的

  组合/聚合 称之为黑箱复用;继承 叫做白箱复用

  design.principle.compositereuse

总结:
  学习设计原则,千万不能形成强迫症。碰到业务复杂的场景,我们需要随机应变。

原文地址:https://www.cnblogs.com/fightingtong/p/12809224.html