单一职能原则
- 定义:应该仅有一个原因引起类的变更。Single Responsibility Principle 简称SRP。
对一个类而言,它承担的功能越多,被复用的可能性越小。
里氏替换原则
Liskov Subsitution Principle
* 定义1: 对于每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型
* 定义2: 所有引用基类的地方必须能透明的使用其子类的对象
即:只要父类能出现的地方,子类就可以出现,而且替换为子类也不会产生任何错误或异常,反过来就不行了。
* 子类必须完全实现父类的方法。如果子类不能完整的实现父类的方法,或者父类的某些方法在子类中发生“畸变”,建议断开继承关系,采用依赖、聚集、组合等关系代替继承。
* 子类可以有自己的个性。子类中的方法的前置条件必须与超类中的相同或更宽泛。(当输入参数不同时,是重载,子类重载父类中的方法)
* 覆写或实现父类的方法时输出结果可以被缩小。
依赖倒置原则
Dependence Inversion Principle 简称DIP
* 高层模块不应该依赖于低层模块,两者都应该依赖于抽象
* 抽象不应该依赖于细节,细节应该依赖于抽象
接口隔离原则
Interfece Segreation Principle
* 客户端不应该依赖它不需要的接口
* 类之间的依赖关系应该建立在最小的接口之上
* 接口尽量要小
* 接口要高内聚
* 接口设计是有限度的
迪米特法则
- 一个对象应该对其他对象有最少的了解
Law of Demeter 简称LOD,也称最少知识原则Least Knowledge Principle LKP
开闭原则
Open Closed Principle
* 一个软件实体,如类、模块、函数,应该对扩展开放,对修改关闭
* 抽象约束
1、通过接口或抽象类约束扩展
2、参数类型、引用对象尽量使用接口或抽象类,而不是实现类
3、抽象层尽量保持稳定,一旦确定不允许修改
* 元数据控制模块行为
元数据:用来描述环境和数据的数据,通俗的讲就是参数,参数可以从文件中获得也可以从数据库中获得。
* 约定优于配置
* 封装变化
将相同的变化封装到一个接口或抽象类中,将不同的变化封装到不同的接口或抽象类中。
本文只是简单列举了一下设计模式之的六大原则及相关定义,具体细节还需要去查找相关资料进行理解。