JAVA之七大设计原则

2022-10-20 08:48:37

目录

七大原则

1、开闭原则(Open Close Principle)

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

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

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

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

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

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


七大原则

开闭原则
里氏替换原则
依赖倒转原则
接口隔离原则
迪米特法则
合成复用原则
单一职责原则

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

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)

定义:类的职责要单一,不能将太多的职责放在一个类中
分析:一个类职责越多,被复用的可能性越小,粒度越小越可能被复用。单一原则是针对实现类的设计模式

  • 作者:kellog_11
  • 原文链接:https://blog.csdn.net/qq_24466549/article/details/123471317
    更新时间:2022-10-20 08:48:37