java中常用的六大设计原则整理

本文详细介绍了软件设计中的六大原则:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和开闭原则。通过实例解析了每个原则的核心思想和优势,旨在提高代码的可维护性、可读性和扩展性,降低耦合度,实现更灵活的设计和更好的代码组织。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、单一职责原则SRP

SRP:Single Responsibility Principle 

定义:There should never be more than one reason for a class to change。(应该有且仅有一个原因引起类的变更。)

个人理解:尽量将业务和技术拆的单一,避免相互影响。设计时需要明确每一个类是做什么的,不要在一个类或模块中做多件事,一个类中可能会做一个模块的多件事,此时,单一职责原则可以在方法中体现。例如,计算机中,CPU只需要负责完成CPU需要完成的工作,而不需要负责键盘和鼠标完成的工作。如果CPU有一天进化了,

优点:

1.降低了复杂度,易于维护

2.提高了可读性

3.避免不相关的代码改动影响了当前完成的功能

二、里氏替换原则LSP

LSP:Liskov Substitution Principle

定义:多用组合,少用继承

通俗解释:子类可以扩展父类的功能,但不能改变父类原有的功能

个人理解:里氏替换原则主要有以下两种方面:

一是为了共享父类中的方法;二是父类是一个抽象类,其中的抽象方法需要在子类中实现,实例化子类对象调用该方法;

在第一种情况下,共享出来的方法就不应该在子类中被重写,否则就失去了想用子类的实例化对象调用父类方法的初心,但是此时子类可以进行扩展,创建一些属于自己的方法,第二种情况下,抽象类是不能实例化的,所以此时必须使用子类对象调用父类中的方法。

里氏替换原则的最终目的是为了实现所有使用父类实例化对象的地方都能使用子类实例化对象替换。

优点:

1.避免子类代码的改动影响到父类中已经完善的功能

2.提高继承体系的可复用性

3.在多态使用的场景下,降低出错的概率

三、依赖倒置原则DIP

DIP:Dependency Inversion Principle

定义:上层模块不应该依赖底层模块,它们都应该依赖于抽象

个人理解:

在微服务的架构里,层次划分为:

SDK/api层:此层封装了给第三方调用的接口,特点是小,不必要的包不放在该层

web/controller层:主要与前端进行交互,springboot的启动类在这层,需要依赖application层

application层:应用层  进行所有的业务操作,依赖domain层

domain层:领域层   不依赖infrastructure层

infrastruture层:基础设施层 与DB、sql、nosql、rpc远程第三方接口 连接 依赖domain层

按照层次划分,从上往下进行依赖调用,但是在domain层和infrastruture层进行依赖倒置,在domain层中提供接口,在infrastructure层中进行实现,这样的好处是当数据库或第三方发生变化时,只需要修改infrastructure层,而不需要进行domain层及其他层的配套修改。

优点:

1.降低代码耦合度

2.提高代码扩展性

3.降低影响范围

四、接口隔离原则ISP

ISP:Interface Segregation Principle

定义:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中方法尽量少。

个人理解:建立接口时应当注意,不要将其他无关的方法放入该接口中,这就表示需要满足单一职责原则。需要注意的是接口粒度也不能过小,过小会导致接口数量过多,提高设计复杂度,这个界限就需要靠经验来判断;同时需要减少对外的交互,提高接口的处理能力;为依赖接口的类提供定制化的服务,只给调用接口的类提供它需要的方法,将它不需要的方法隐藏起来。

优点:

1.提高接口内聚性

2.提供定制化服务

五、迪米特法则/最少知识原则LoD

LoD:Law of Demeter 

定义:talk only to your immediate friends

个人理解:迪米特法则说的是只跟你的密友谈话。那么什么是密友呢?出现在成员变量、方法的输入输出参数中的类被称为成员朋友类;另外,朋友的朋友不是朋友。

例如:想查看图书馆里的《大话设计模块》中的第二章,那就得先去图书馆,然后找到《大话设计模式》,然后找到第二章,在这个场景下,图书馆和《大话》是有关系的,《大话》和书中的第二章是有关系的,但是图书馆和书中的第二章是没有关系的,图书馆也不需要知道第二章,这就符合迪米特法则。

优点:

1.只需要对自己模块负责,职责划分清晰

2.高内聚,低耦合

六、开闭原则OCP

OCP:Open Close Principle

定义:对修改关闭,对扩展开放

个人理解:一个士兵需要一把枪,如果直接在士兵类中给定使用的是AK47,那么,如果后续枪类型发生了变化,这个时候只能修改代码,就违背了开闭原则,正确的方式应该是在士兵类中给枪的接口,在调用处指定使用的枪是什么

优点:

1.提高复用性

2.易于维护

**************此文章只是本人学习过程中的学习笔记,不做其他用途,如果有其他意见,欢迎一起讨论,谢谢,侵删*************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值