简介
- 单一职责原则。对类来讲,即一个类应该只负责一项职责。
- 开闭原则。对扩展开放,对修改关闭。在程序须要进行扩展的时候,不能去修改原有代码,使用接口和抽象类实现一个热插拔的效果。
- 里氏替换原则。任何基类能够出现的地方,子类必定能够出现。实现抽象的规范,实现子父类相互替换。
- 依赖倒置原则。针对接口编程,依赖于抽象而不依赖于具体。
- 接口隔离原则。下降耦合度,接口单独设计,相互隔离。
- 最少知道原则(迪米特法则)。一个实体应当尽可能少地与其余实体之间发生相互做用,使得系统功能模块相对独立。
- 合成复用原则。尽可能使用聚合、组合的方式,而不是使用继承。
单一职责原则
对类来讲,即一个类应该只负责一项职责。如类A负责两个不一样的职责:职责一、职责2。当职责1需求变动而改变A时,可能形成职责2执行错误,因此须要将类A的粒度分解为A一、A2。java
开闭原则
一个实体如类,模板和函数应该对扩展开放(服务提供方),对修改关闭(服务使用方)。用抽象构建框架,用实现扩展细节。web
- 是编程中最基础。最重要的设计原则。
- 当软件须要变化时,尽可能经过扩展软件实体的行为来实现变化,而不是经过修改已有代码来实现变化。
- 编程中遵循其余原则以及使用是设计模式的目的就是遵循开闭原则。
里氏替换原则
若是对每个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的全部程序 P 在全部的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。换句话说,全部引用基类的地方必须可以透明的使用其子类对象。编程
在使用继承时,遵循里氏替换原则,在子类中尽可能不要重写父类的方法。设计模式
- 子类能够实现父类的抽象方法,但不能覆盖父类的非抽象方法。
- 子类中能够增长本身特有的方法。
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
- 继承实际上让两个类的耦合度加强了,在适当的状况下,能够经过聚合、组合、依赖来解决问题。
依赖倒置原则
高层模块不该该依赖低层模块,两者都应该依赖其抽象;抽象不该该依赖细节,细节应该依赖抽象。即针对接口编程,不要针对实现编程。架构
- 依赖倒置的中心思想就是面向接口编程。传递依赖关系有三种方式,以上的说的是是接口传递,另外还有两种传递方式:构造方法传递和setter方法传递,回忆一下Spring框架。
- 依赖倒置原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构要比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类。
- 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操做,把展示细节的任务交给他们的实现类去完成。
- 低层模板尽可能都要有抽象类或接口,或者两个都有,程序稳定性更好。
- 变量的声明类型尽可能都是抽象类或接口,这样咱们的变量变量引用和实际对象间就存在一个缓冲层,有利于程序的扩展和优化。
- 继承时遵循里氏替换原则。
接口隔离原则
客户端不该该依赖它不须要的接口,即一个类对另一个类的依赖应该创建在最小的接口上。框架
- 创建单一接口,不要创建庞大臃肿的接口,尽可能细化接口,接口中的方法尽可能少。
最少知道原则(迪米特法则)
一个实体应当尽可能少地与其余实体之间发生相互做用,使得系统功能模块相对独立。svg
- 一个对象应该对其余对象保持最少的了解。
- 类于类的关系越密切,耦合度越大。
- 通俗的来说,就是一个类对本身依赖的类知道的越少越好。也就是说,对于被依赖的类来讲,不管逻辑多么复杂,都尽可能地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
- 迪米特法则还有一个更简单的定义:只与直接的朋友通讯
- 直接朋友:每一个对象都会与其余对象有耦合关系,只要两个对象之间有耦合关系,咱们就说这两个对象之间是朋友关系。耦合的方式不少,依赖、关联、组合、聚合等。其中,咱们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出如今局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要做为局部变量的形式出如今类的内部。
合成复用原则
尽可能使用聚合、组合的方式,而不是使用继承。函数