一文搞懂设计模式七大原则
什么是设计模式
设计模式的定义:对面向对象设计中反复出现的问题的解决方案,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 说白了就是大家都知道的一种解决代码问题的高效解决方案,例如:代码的重用性,提高代码的可扩展性,达到高内聚低耦合的目的。(内聚一个模块中各个元素(语句、程序段)之间的联系的紧密程度。耦合就是每个模块之间相互联系的紧密程度)
什么是设计模式的原则
设计模式的原则就是解决问题过程中遵循的规则
单一职责原则
定义:对于一个类而言,应该仅有一个引起它变化的原因。 解释:其实就是类的具有功能上的原子性,因为有了单一职责,项目的功能就能被拆分成各个功能原子模块,这样就能更好的进行扩展,这一点类似于微服务拆分,好的拆分能够使分布式更容易扩展,提高架构的可用性。 举例:把大象从冰箱需要分几步,如果分成一步,如果我们再扩展一个功能把大象放冰箱的同时再放入蚂蚁,显然这个时候如果实现就必须就必须修改步骤内容,如果我们分成三部,打开冰箱、放入大象、关闭冰箱,这个时候实现同时放入蚂蚁,只需要在打开冰箱和关闭冰箱步骤之间加入放入蚂蚁步骤,就不需要修改步骤了,实现了扩展性。
开闭原则
定义:对扩展开放,对修改关闭。 解释:意思就允许写新的模块来扩展功能,不允许修改原来写好的模块。
依赖倒置原则
定义:高层次模块不应该直接依赖低层模块,应该依赖低层模块的接口或者抽象类。抽象不能依赖于细节,细节依赖与抽象。 解释:抽象就是接口,细节就是类,意思就是当一个类依赖(依赖就是一类作为另外一个类的局部变量、形参、或者静态方法调用)于另外一个类的时候应该依赖这个类的接口(或者继承的抽象类),因为这样这个类就可以依赖接口下的所有类,增强了可扩展性。 举例:
里氏替换原则
定义:子类可以扩展父类的功能,但不能改变原有父类的功能; 解释:子类在继承父类的同时尽量不要重写父类的方法,这样是为了降低继承的缺点,继承的优点,提高代码的复用性和可维护性。继承的缺点,使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。解决继承缺点的其他方法,在适当的情况下,可 以通过聚合,组合,依赖 来解决问题。
接口隔离原则
定义:建立单一接口,不要建立臃肿庞大的接口。 解释:客户端不应该依赖它不需要的接 口,即一个类对另一个类的依赖 应该建立在最小的接口上,这样使代码的逻辑更加简洁。 举例:
迪米特法则
定义:一个软件实体应当尽可能的少与其他实体发生相互作用。 解释: 一个对象应该对其他对象保持最少的了解,类与类关系越密切,耦合度越大,迪米特法则就是为了降低耦合度,这样对于那些间接依赖的模块不要增加直接依赖关系。 举例:
合成复用原则
定义: 原则是尽量使用合成/聚合的方式,而不是使用继承。 解释:目的就是降低继承所带来的耦合性高的问题。合成就是被依赖的类作为类的局部变量、参数、静态调用。 实现的基本步骤: 1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 2、针对接口编程,而不是针对实现编程。 3、为了交互对象之间的松耦合设计而努力