单一职责原则
描述:A class should have only one reasonto change
(就一个类而言,应该仅有一个引起它变化的原因)
英文缩写:SRP
英文全称:single Responsibility Principle
核心思想:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。
这也是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个。也就是我们常说的”高内聚、低耦合”。“单一职责”也就是“单一变化原因”。“职责”也就是引起类变化的原因。
遵循单一职责 原则的优点:
- 可以降低类的复杂度
- 提高类的可读性
- 提高系统的可维护性
- 变更引起的风险降低
里氏替换原则
描述:Functions that use pointers orreferences to base classes must be able to use objects of derived classeswithout knowing it
(所有引用基类的地方必须能透明地使用其子类的对象)
英文缩写:LSP
英文全称:Liskov Substitution Principle
核心思想:在任何父类出现的地方都可以用它的子类来替代。
也就是说,同一个继承体系中的对象应该有共同的行为特征。
简单来说,有四层含义:
- 子类必须完全实现父类的方法
- 子类可以有自己的特性
- 覆盖或者实现父类的方法时输入参数可以被放大
- 覆盖或者实现父类的方法时输出结果可以被缩小
说明:
当使用继承时 ,要遵循 里氏替换 原则 类B继承类A时,除添加新的方法完成新增功能外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法 父类中已经实现好的方法,实际上是在设定一系列的规范和契约(contract),虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破坏 继承在给程序设计带来巨大便利的同时,也带来了 弊端
接口分离原则
描述:Clients should not be forced todepend upon interfaces that they do not use.
(客户端不应该依赖它不需要的接口)
英文缩写:ISP
英文全称:Interface Segregation Principle
核心思想:不应该强迫客户程序依赖它们不需要使用的方法。
也就是说,一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中。
在使用接口分离原则时,需要有一些规范:
- 接口尽量小
- 接口高内聚
- 接口设计是有限度的
说明:
接口分离原则与单一职责原则有些相似,不过不同在于:单一职责原则要求的是类和接口职责单一,注重的是职责,是业务逻辑上的划分。而接口分离原则要求的接口的方法尽量少,针对一个模块尽量有用。
依赖注入原则(依赖倒置原则)
描述:High-level modules should notdepend on low-levelmodules.Both shoulddepend on abstractions.
(高层模块不应该依赖低层模块,二者都应该依赖其抽象)
英文缩写:DIP
英文全称:Dependence Inversion Principle
核心思想:要依赖于抽象,不要依赖于具体的实现。
也就是说,在应用程序中,所有的类如果使用或依赖于其他的类,则都应该依赖于这些其他类的抽象类,而不是这些其他类的具体实现类。抽象层次应该不依赖于具体的实现细节,这样才能保证系统的可复用性和可维护性。
说明:
- 高层模块不应该依赖低层模块,两者都应该依赖于抽象(抽象类或接口)
- 抽象(抽象类或接口)不应该依赖于细节(具体实现类)
- 细节(具体实现类)应该依赖抽象
实现方法:
- 通过构造函数传递依赖对象
- 通过setter方法传递依赖对象
- 接口声明实现依赖对象
迪米特原则
英文缩写:LOD
英文全称:Law of Demeter
核心思想:一个对象应当对其他对象尽可能少地了解。
也就是说,要降低各个对象之间的耦合,提高系统的可维护性。在模块之间,应该只通过接口来通信,而不理会模块的内部工作原理,它可以使各个模块耦合程度降至最低,促进软件的复用。
开闭原则
描述:Software entities (classes,modules, functions, etc.,) shouldbe open for extension, but closed for modification
(一个软件实体(如类、模块和函数)应该对扩展开放,对修改关闭)
英文缩写:OCP
英文全称:Open for Extension,Closed for Modification
核心思想:一个对象对扩展开和,对修改关闭
也就是说,对类的发动是通过增加代码进行的,而不是改动现有的代码。换言之,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91462 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!