1、单一职责原则
介绍:对于类来说,即一个类应该只负责一项职责。
例如:A类负责不同职责:职责1、职责2;当职责1发生改变可能会导致职责2发生异常,需要把A类拆分为2个类,分别去负责职责1和职责2,让它们各干各的互不影响。
目的:
-
降低类的复杂度,一个类只负责一项职责。
-
提高类的可读性、维护性。
-
降低变更引起的风险。
-
只有类中的方法足够少,才可以在方法级别保持单一原则。
2、开闭原则
介绍:程序设计的最基础,最重要的设计原则。
核心思想是对扩展开放(相对提供方),对修改关闭(相对使用方)。
用抽象构建框架,用实现扩展细节。
3、接口隔离原则
介绍:一个类对另一个类的依赖应该建立在最小接口上。例如A接口有5个方法,B、D类接口对A实现,B需要123方法,D需要234方法,这样就违背了接口隔离原则。应该把5个方法拆分为不同的接口或抽象,让BD需要的函数去继承或实现对应的接口或抽象。
说明:一个类通过接口依赖另一个类,希望依赖接口是最小的,用不到的方法可以通过接口进行隔离。
4、依赖倒转原则
介绍:高层模块不应该依赖低层模块,两者都应该依赖抽象(抽象类或接口)。
抽象不应该依赖细节,细节应该依赖抽象。
中心思想就是面向接口编程。
依赖关系传递分为:接口传递、构造方法传递、setter方法传递。
细节:
-
低层模块尽量要有抽象(抽象类或接口),这样程序的稳定性好。
-
变量的声明类型尽量是抽象类或接口,这样变量的引用和实际对象间,就存在缓冲层,利于程序扩展、优化。
5、里氏替换原则
原由:继承在给程序设计带来便利的同时,也带来弊端。使用继承会给程序带来侵入性,程序的可移植性降低,增加对象耦合性,一个类被其他类所继承,当这个类修改,会影响所有子类,所有涉及到子类的功能也会产生影响。
介绍:在子类中尽量不要重写父类的方法。里氏替换原则告诉我们,继承让两个类的耦合性增强了,可以通过聚合、组合、依赖来降低耦合度。
6、迪米特法则
定义:又叫最少知道原则;还可以定义为只与直接朋友通信。
介绍:一个对象应该对其对象保持最少的了解。一个类对自己依赖的类知道的越少越好,对于被依赖的类,尽量将逻辑封装到类的内部,对外提供public方法。
直接朋友:只要对象之间有耦合关系,我们说对象之间有朋友关系,耦合方式有很多,依赖、关联、组合、聚合等。其中出现成员变量、方法参数、方法返回值中的类为直接朋友;陌生的类最好不要以局部变量的形式出现,在类的内部,这样违背了迪米特法则。
迪米特法则的核心思想是降低类之间的耦合。只是降低类之间的耦合关系,并不是没有依赖。
7、合成复用原则
尽量使用合成/聚合的方式,而不是继承。
设计原则核心思想:
-
找出应用中可能会变化的,把它们独立出来,不要和那些不变的混在一起。
-
针对接口编程,而不是针对实现编程。
-
为了交互对象之间松耦合设计而努力。
总结:
开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合度;合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。在实际开发中我们可以根据业务来进行设计模式的使用,但是很重要的一点千万不要被这些条条框框束缚了你的手脚。