解密设计模式的七大原则

Posted itps

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解密设计模式的七大原则相关的知识,希望对你有一定的参考价值。

里氏替换原则

依赖倒转原则

接口隔离原则

迪米特法则

合成复用原则

单一职责原则

设计原则总得来说还是为了让代码尽量的:高内聚、低耦合。提高代码的扩展性,复用性。实际开发中需要平衡开发效率与代码设计的量,设计模式使用过多类和方法细分会越多,导致过于臃肿

1、开闭原则(Open Close Principle)

定义:开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

分析:抽象化是开闭原则的关键。想要达到这样的效果,我们需要使用接口和抽象类。

2、里氏代换原则(Liskov Substitution Principle)

定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。

分析:我的理解就是引用了父类的地方替换成子类不影响代码运行

使用里氏代换原则需要注意:

1)子类的多有方法必须在父类中声明,或者子类必须实现父类中声名的所有方法。

2)尽量把父类设计成抽象类或接口,让子类继承父类或实现父接口。增加一个新功能时,通过增加一个新的子类来实现。

3)java语言编译时会检查一个程序是否符合里氏代换原则,但只是一个语法意义上的检查,有局限性。

3、依赖倒转原则(Dependence Inversion Principle)

定义:这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

分析:简单来说,依赖倒转原则就是指:代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。

  实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要手段。

Spring的DI 就是依赖倒转原则的一个具体实现

策略模式也遵循依赖倒转原则

4、接口隔离原则(Interface Segregation Principle)

定义:客户端不应该依赖那些它不需要的接口。

  一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。

分析:接口隔离原则针对的是接口类,与单一职责原则的区别就是单一原则针对的是实现类,两者区分的维度不一样

5、迪米特法则,又称最少知道原则(Demeter Principle)

定义:

1) 不要和“陌生人”说话。

2) 只与你的直接朋友通信。

3) 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

分析:也是为了降低类之间的耦合,增加局部的内聚,增强扩展性。当一个模块功能独立时,对其进行修改扩展会更加的容易

在迪米特法则中,对于一个对象,其朋友包括以下几类:

1) 当前对象本身(this);

2) 以参数形式传入到当前对象方法中的对象;

3) 当前对象的成员对象;

4) 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;

5) 当前对象所创建的对象。

任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。

  迪米特法则可分为狭义法则和广义法则。在狭义的迪米特法则中,如果两个类之间不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

  狭义的迪米特法则:可以降低类之间的耦合,但是会在系统中增加大量的小方法并散落在系统的各个角落,它可以使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联,但是也会造成系统的不同模块之间的通信效率降低,使得系统的不同模块之间不容易协调。

  广义的迪米特法则:指对对象之间的信息流量、流向以及信息的影响的控制,主要是对信息隐藏的控制。信息的隐藏可以使各个子系统之间脱耦,从而允许它们独立地被开发、优化、使用和修改,同时可以促进软件的复用,由于每一个模块都不依赖于其他模块而存在,因此每一个模块都可以独立地在其他的地方使用。一个系统的规模越大,信息的隐藏就越重要,而信息隐藏的重要性也就越明显。

用途在于控制信息的过载:

1)在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;

2)在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;

3)在类的设计上,只要有可能,一个类型应当设计成不变类;

4)在对其他类的引用上,一个对象对其他对象的引用应当降到最低。

6、合成复用原则(Composite Reuse Principle)

定义:合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

分析:继承属于高耦合,没有组合/聚合方式灵活。使用继承时需要充分遵循里氏替换原则.

总之就是能用组合/聚合就不用继承

7、单一职责原则(Single Responsibility Principle, SRP)

定义:类的职责要单一,不能将太多的职责放在一个类中

分析:一个类职责越多,被复用的可能性越小,粒度越小越可能被复用。单一原则是针对实现类的设计模式

以上是关于解密设计模式的七大原则的主要内容,如果未能解决你的问题,请参考以下文章

设计模式----七大原则和UML类图

面向对象七大设计原则

设计模式的七大设计原则

设计模式七大原则

图解Java设计模式之设计模式七大原则

设计模式 - 七大设计原则