设计模式的七大原则

前言

  一直感觉设计模式非常的高大上,正好现在有空闲时间,准备学习学习设计模式相关的知识。该篇文章主要是关于七大设计模式原则。

正文

  设计模式的七大原则有:

    开闭原则

    里氏替换原则

    依赖倒置原则

    单一职责原则

    接口隔离原则

    迪米特法则(最少知道原则)

    合成复用原则

  

  下面是对各个原则的详细解释:

 

  1、开闭原则:

  (1)基本介绍:

   ①开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则。

   ②一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。

   ③当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

  (2)作用:

   ①对软件测试的影响,即软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。

   ②可以提高代码的可复用性,即粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。

   ③可以提高软件的可维护性,即遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。

  (3)实现方法:

   可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。

 

  2、里氏替换原则:

  (1)基本介绍:

   ①如果对每个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象。

   ②子类可以扩展父类的功能,但是不能修改父类原有的功能。

   ③在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法

   ④里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖来解决问题。

  (2)作用:

   ①里氏替换原则是实现开闭原则的重要方式之一。

   ②它克服了继承中重写父类造成的可复用性变差的缺点。

   ③它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。

  (3)实现方法:

   子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

 

  3、依赖倒置原则:

  (1)基本介绍:

   ①高层模块不应该依赖低层模块,二者都应该依赖其抽象。

   ②抽象不应该依赖细节,细节应该依赖抽象。

   ③依赖倒转(倒置)的中心思想是面向接口编程

  (2)作用:

   ①可以降低类间的耦合性。

   ②可以提高系统的稳定性。

   ③可以提高代码的可读性和可维护性。

  (3)实现方法:

   ①每个类尽量提供接口或抽象类,或者两者都具备。

   ②变量的声明类型尽量是接口或者是抽象类。

   ③任何类都不应该从具体类派生。

   ④使用继承时尽量遵循里氏替换原则。

 

  4、单一职责原则:

  (1)基本介绍:

   一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。

  (2)作用:

   ①降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。

   ②提高类的可读性。复杂性降低,自然其可读性会提高。

   ③提高系统的可维护性。可读性提高,那自然更容易维护了。

   ④变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。

  (3)实现方法:

   发现出类的不同职责并将其分离,再封装到不同的类或模块中。

 

  5、接口隔离原则:

  (1)基本介绍:

   要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

  (2)作用:

   ①将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

   ②接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性。

   ③使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。

  (3)实现方法:

   ①接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。

   ②为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。

   ③提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

 

  6、迪米特法则(最少知道原则):

  (1)基本介绍:

   ①一个对象应该对其他对象保持最少的了解。

   ②类与类关系越密切,耦合度越大。

   ③迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多少复杂,都尽量将逻辑封装在类的内部。对外除了提供的public 方法,不对外泄露任何信息

   ④只与你的直接朋友交谈,朋友类的定义是这样的:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

  (2)作用:

   ①降低了类之间的耦合度,提高了模块的相对独立性。

   ②由于亲合度降低,从而提高了类的可复用率和系统的扩展性。

  (3)实现方法:

   ①在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。

   ②在类的结构设计上,尽量降低类成员的访问权限。

 

  7、合成复用原则:

  (1)基本介绍:

   在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现(如果要使用继承关系,则必须严格遵循里氏替换原则)。

  (2)作用:

   ①维持了类的封装性。因为成分对象的内部细节是新对象看不见的,所以这种复用又称为“黑箱”复用。

   ②新旧类之间的耦合度低。这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口。

   ③复用的灵活性高。这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象。

  (3)实现方式:

   通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。

   

  

posted @ 2020-08-28 10:20  路人甲、  阅读(151)  评论(0)    收藏  举报