1、开闭原则
定义:类,模块,函数对扩展开放对修改关闭。如工厂模式
对扩展开放:模块对扩展开放就意味着,当需求变化时,可以对模块进行扩展,使其满足具有新需求的功能,换句话说就是模块通过扩展的方式满足需求的变化。
2、单一职责原则
定义:只能让一个类/接口/方法有且仅有一个职责
接口职责单一,应该有且仅有一个原因引起类的变更,好处是能降低了类的复杂度、提高类的可读性,提高系统的可维护性、降低变更引起的风险。
3、里氏代换原则
定义:所有引用基类的地方必须能透明地使用其派生类(子类)的对象
子类可以扩展父类的功能,但不能改变父类原有的功能
1.子类必须完全实现父类的抽象方法,不能改变父类原来功能;
2.子类可以有自己的个性(属性和方法);
3.覆盖或实现父类的方法时输入参数可以被放大:子类方法参数可以使用抽象类、父类或者接口。(遵循父类契约设计优选原则)
4、接口隔离原则
定义:建立单一接口,不要建立臃肿庞大的接口
通俗来讲:接口尽量细化,同时接口中的方法尽量少。
备注:如何细化?细化到什么程序?没有统一的标准,应根据业务合理细分,适合业务才是重点。尽量少公布public方法。要高内聚。
5、迪米特法则
定义:一个类应该对自己需要耦合或调用的类知道得最少
通俗来讲,你(被耦合或调用的类)的内部是如何复杂都和我没有关系,那是你的事情,我就调用你提供的public方法,其他一概不关心,能有效降低类之间的耦合性
6、依赖倒置原则
定义:A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
B. 抽象不应该依赖于细节,细节应该依赖于抽象;
C.针对接口编程,不要针对实现编程。
精简的定义: 面向接口编程。
Test-Driven Development 测试驱动开发是依赖倒置原则的最好体现。测试驱动开发要求先写测试类,测试通过才写实现类,这就要求你要先想接口定义。