概述

最终就是 抽象 单一直则 最小化

单一职责原则(Single Responsibility Principle)

简述

简称SPR 一个类只做一件事.

并不是说一个类只有一个函数,而是说这个类中的所有函数必须是高度相关的.高内聚.

优点

  • 类的复杂度降低,实现什么职责有明确的定义
  • 可读性提高
  • 可维护性提高
  • 变更引起的风险降低.一个接口的修改只影响相应的实现类,对其他的接口无影响.

里氏替换原则(Liskov Substitution Principle)

简述

面向对象语言三大特征是封装,继承,多态.

里氏替换原则简单来说就是所有引用基类的地方必须能透明的使用其子类的对象.也就是说,只要有父类出现的地方子类就可以出现,并且用这个子类替换父类也不会产生任何错误和异常,但是反过来就不行,父类不一定能替代子类.

例如构造方法的参数是接口类型的,只要实现了这个接口的都可以调用这个构造方法创建对象

优点

  • 代码共享减少创作类的工作量,因为每个子类都拥有父类的所有方法和属性
  • 提高代码重用度
  • 提高代码可扩展性,实现父类的方法就行了
  • 提高产品和项目的开放性

缺点

  • 继承是入侵的,只要继承就必须拥有父类的所有属性和方法
  • 降低代码灵活性,子类必须拥有父类的所有属性的方法,对子类多了些约束
  • 增强了耦合性,当父类的常量,变量,方法等改变时要考虑到子类的修改.搞不好大量代码需要重构.

依赖倒置原则(Dependence inversion Principle)

简述

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

JAva中抽象就是指接口或抽象类,两者都不能被实例化.实现或继承他们产生的类就是细节,细节的特点是能被实例化.

模块之间的依赖通过抽象发生,实现类与实现类之间不发生直接依赖关系,他们的依赖关系是通过接口或抽象类进行的.

面向接口编程是面向对象精髓之一.

优点

  • 可拓展性好
  • 耦合度低

开闭原则(Open-Close Principle)

简述

java中最基础的设计原则,指导我们如何建立一个稳定/灵活的系统.

定义:一个软件实体,如类,模块,函数都应该对扩展开放,对修改关闭.

在软件生命周期内,迭代时尽量通过扩展的方式来实现变化,而不是通过修改执勤啊的已有代码来实现.

优点

  • 增加稳定性
  • 可拓展性高

接口隔离原则(Interface Segregation Principle)

简述

客户端不应该依赖他不需要的接口.一个类对另一个类的依赖应该建立在最小的接口上.档一个接口太大时,就要考虑分割成更小的接口.客户端进需要指导与之相关的方法即可

优点

  • 降低耦合性
  • 提高代码的可读性
  • 隐藏实现细节

迪米特原则(Law of Demeter)/最少知识原则(Least Knowledge Principle)

简述

一个对象应该对其他对象有最少的了解.

类的内部如何实现,如何复杂都与调用者或依赖者没有关系,调用者或依赖者只需要知道他需要的方法即可.

优点

  • 降低复杂度
  • 降低耦合度
  • 增加稳定性