首页 >> 经验问答 >

问java 高内聚 面向对象设计原则详解

2026-11-08 15:34:23

答

java 高内聚是面向对象设计里面非常重要的设计思想,经常和低耦合搭配出现,高内聚的含义就是一个类或者一个模块内部,所有方法和成员变量都围绕同一个单一职责,模块内部功能紧密相关,不要把多种不相关业务塞进同一个类里面。很多新手写 Java 代码的时候,习惯把用户订单支付日志全部写在一个大类里面,这就是典型低内聚,后期修改业务的时候改动范围大,代码很难维护。高内聚的目标就是让每个类只干一件事,类内部代码联系紧密,职责单一,配合低耦合,就能写出易扩展易维护的 Java 项目,这个思想在 SSM SpringBoot 项目开发还有面试当中都是高频考点。想要实现 java 高内聚,可以先理解单一职责原则,再拆分臃肿大类,把不同业务独立成类,检查类里面方法是否属于同一个业务目标,持续重构优化代码。

基础信息表

项目内容
概念名称高内聚
所属领域Java 面向对象 软件设计原则
配套概念低耦合
核心依据单一职责原则 SRP
应用场景类设计 模块划分 分层架构 DAO Service Controller

高内聚核心定义深度讲解

内聚描述的是类或者模块内部各个元素之间的关联紧密程度,内聚越高,代表这个类里面所有方法属性,都是为了完成同一个业务目标,功能集中,职责纯粹。

举个例子,UserService 这个类,只处理用户相关业务,用户注册 用户查询 用户更新 用户删除,这些方法全部围绕用户业务,这就是高内聚。

反面例子,UserService 里面同时写用户业务,订单计算,短信发送,日志打印,多个无关业务混在一起,内聚就很低。

内聚等级 从低到高

内聚等级说明
偶然内聚类里面方法没有关联,随便堆在一起,最差
逻辑内聚同类操作但是业务目标不一样
时间内聚同一时间执行的功能放在一起
过程内聚按照执行流程串联的功能
通信内聚操作同一份数据的功能
顺序内聚前一个方法输出是下一个方法输入
功能内聚最高等级,所有方法共同完成单一功能,也就是我们追求的高内聚

java 项目里面高内聚的落地方式

1 分层架构实现高内聚

Controller 层 只负责接收请求 参数校验 调用 Service

Service 层 专门写业务逻辑

DAO Mapper 层 专门数据库增删改查

每一层职责固定,层内部代码围绕本职工作,就是高内聚典型应用

2 类拆分重构

原本巨大的 God 类上帝类,按照业务拆分成多个独立类,比如订单计算单独 OrderCalcService,通知单独 NotifyService

3 遵守单一职责原则

一个类只有一个引起修改的原因,如果一个类因为两个不同业务需求都要修改,就说明这个类需要拆分

高内聚和低耦合的区别

高内聚关注的是模块内部,内部功能要集中单一

低耦合关注的是模块外部,模块之间相互依赖程度要尽量小

两个原则经常一起使用,高内聚一般也更容易做到低耦合

常见误区

1 误区 高内聚就是类里面方法数量越少越好

纠正 不是方法数量少,是方法业务目标统一,就算类里面方法很多,全部都是同一业务,依然属于高内聚

2 误区 高内聚等于不能修改类

纠正 高内聚是职责单一,业务本身迭代的时候仍然可以修改这个类,只是不会因为无关业务被迫改动

3 误区 只要高内聚代码就一定优秀

纠正 高内聚是设计原则,还要同时兼顾低耦合,过度拆分也会造成类数量爆炸,增加系统复杂度

【常见问题】

问题 1 java 高内聚和单一职责原则是什么关系

回答 1 java 高内聚是设计效果,单一职责原则是实现高内聚的核心手段,按照单一职责拆分类,最终就能达到高内聚的设计目标。

问题 2 java 高内聚是不是必须和低耦合一起理解

回答 1 java 高内聚经常和低耦合成对出现,高内聚管模块内部,低耦合管模块之间依赖,做 Java 设计的时候一般两个原则同时考虑。

问题 3 java 高内聚在 SpringBoot 项目里面怎么体现

回答 1 java 高内聚在 SpringBoot 项目主要体现在分层设计,Controller Service Mapper 各自职责独立,每个 Service 只负责对应的业务模块,不会混杂其他无关业务逻辑。

【免责申明】

本内容仅针对 java 高内聚设计原则教学科普,不同教材对内聚等级划分表述略有差别,面试答题可以结合教材版本调整描述,不代表唯一标准答案。

 

相关阅读

标签: java高内聚
最新文章