Java中的低耦合高内聚法则
java框架模式_低耦合高内聚法则
定义:一个对象应该对其他对象保持最少的了解。
问题由来:类与类之间的关系越来越密切,耦合度越来越大,当一个类发生改变时,对另外一个类的影响也越大.
解决方案:尽量降低类与类之间的耦合.
案例:在一所学校,里面有老师若干名,依次编号。下面有学生若干名,一次编号。现在要求打印出所有的老师和学生的ID.
(1)违反低耦合高内聚原则的代码,如下:
import java.util.ArrayList;
import java.util.List;class Teacher{privateString id;publicvoidsetId(String id){this.id=id;}publicString getId(){return id;}
}
class Student{private String id;public void setId(String id){this.id=id;}public String getId(){return id;}
}
class StudentManage{publicList<Student> getAllStudent(){ List<Student> list=newArrayList<Student>();for(int i=0;i<100;i++){ Student student=new Student();student.setId("学生学号是"+i); list.add(student); }return list;}}
class TeacherManage{ publicList<Teacher> getAllTeacher(){List<Teacher> list=newArrayList<Teacher>(); for(inti=0;i<100;i++){ Teacher teacher =new Teacher();teacher.setId("老师编号"+i); list.add(teacher);}return list;}public void printAllPerson(StudentManagestudentmanager){List<Student>list1=studentmanager.getAllStudent();for(Student s:list1){System.out.println(s.getId());}List<Teacher>list2=this.getAllTeacher();for(Teacher t:list2){System.out.println(t.getId());} }
}public classClient {publicstaticvoidmain(String[] args) {TeacherManagetm=newTeacherManage();tm.printAllPerson(new StudentManage()); }
}
现在这个设计的主要问题出现在TeacherManage类中,根据低耦合高内聚法则,Student类与TeacherManage类发生耦合。
(2)修改之后的代码如下:
import java.util.ArrayList;
import java.util.List;class Teacher{privateString id;publicvoidsetId(String id){this.id=id;}publicString getId(){return id;}
}
class Student{private String id;public void setId(String id){this.id=id;}public String getId(){return id;}
}
class StudentManage{publicList<Student> getAllStudent(){ List<Student> list=newArrayList<Student>();for(int i=0;i<100;i++){ Student student=new Student();student.setId("学生学号是"+i); list.add(student); }return list;}public void printAllStudent(){List<Student>list1=this.getAllStudent();for(Student s:list1){System.out.println(s.getId());}}}
class TeacherManage
{ publicList<Teacher> getAllTeacher(){List<Teacher> list=newArrayList<Teacher>(); for(inti=0;i<100;i++){ Teacher teacher =new Teacher();teacher.setId("老师编号"+i); list.add(teacher);}return list;}publicvoidprintAllTeacher(){List<Teacher> list2=this.getAllTeacher();for(Teacher t:list2){System.out.println(t.getId());}}}public classClient {publicstaticvoidmain(String[] args) {TeacherManagetm=newTeacherManage();tm.printAllTeacher();StudentManagesm=newStudentManage();sm.printAllStudent();
}
}
修改后,学生新增加了学生ID的方法,老师直接来调用即可。从而避免了与学生发生耦合。低耦合高内聚原则的初衷是降低了类之间的耦合,由于每个类减少了不必要的依赖,因此的确可以降低耦合关系。采用此法则可以做到结构清晰,高内聚低耦合、
Java中的低耦合高内聚法则相关推荐
- c语言如何实现高内聚低耦合_如何实现高内聚低耦合?高内聚低耦合的现实例子...
下面要给大家分享的是一个高内聚低耦合例子,那么编程应该如何实现高内聚低耦合呢?一起来看看下面的实例吧! 案例: 在一个学校里面,有着老师若干名,依次编号. 有学生若干名,依次编号. 现在的话,是要求要 ...
- 很强大!低耦合高内聚的MCU实用软件框架
大家好,我是晓宇,不知道大家有没有听过软件设计中的低耦合,高内聚的两个原则. 具体是什么意思呢? 在一个项目中:每个模块之间相联系越紧密,则耦合性越高:这样你改动其中一个模块,其他模块也需要一起改动, ...
- 程序开发之——低耦合高内聚
内聚概念 内聚性,又称块内联系.指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量. 内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标.模块中组成元素结合的越紧密 ...
- 详解高耦合低内聚,低耦合高内聚
什么是高耦合低内聚,低耦合高内聚 耦合:不就是耦合系数高与低吗,就是关联性强不强 内聚:内聚是指是不是具有很强的功能性,一个模块或方法是不是只干一件事,越强的内聚或者高内聚模块应当恰好只做一件事. 用 ...
- 低耦合高内聚什么意思?
低耦合高内聚 很多小伙伴不理解低耦合高内聚什么意思?我给大家通俗的讲一下 低耦合 解决冗余(rongyu)代码,提高代码重复使用率 冗余:很多相似的代码
- 3分钟Tips:用大白话告诉你什么是低耦合|高内聚
1.高内聚 首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高.在软件中内聚程度的高低,标识着软件设计的好坏. 我们在进 ...
- 低耦合高内聚 原则的应用
这次主要是分享对软件设计中的"低耦合.高内聚"原则的一些个人体会,通过lorawan代码等实例分析,让大家对这个设计思想有一些具象的理解. 本文作者twowinter,转载请注明作 ...
- 耦合关系从强到弱顺序_低耦合 高内聚
一 什么是低耦合 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少. 模块间的耦合度是指模块之间的依赖关系,包括控制关系 ...
- 简单理解高内聚低耦合-高内聚低耦合通俗理解是什么?
低耦合: 耦合就是元素与元素之间的连接,感知和依赖量度.这里说的元素即是功能,对象,系统,子系统.模块. 例如:现在有方法A和方法B 我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就 ...
最新文章
- android 相册 uri空,android拍照获得图片URI为空的处理方法
- 揭秘各国总统们钟爱的手机
- 富学金融穷学IT,分析互联网的新财富密码
- ASCII码表在线查询进制转换
- P3701 -「伪模板」主席树【网络流,最大流】
- 高可用Hadoop平台-Oozie工作流之Hadoop调度
- 【转】SQL语句删除和添加外键、主键
- pythoncsv数据类型_从CSV确定数据类型-Python
- python arp_在python上发出ARP请求
- mysql表关联查询都有什么方式_Mysql数据库多表联合查询有几种方法?
- jQuery入门 jQuery入门第一天 1. jQuery入门
- 二、【服务器】服务器入门·服务器简介
- oracle 密码解锁
- Freeswitch呼入及呼出录音问题
- 《开天辟地》之《网上冲浪篇》将带你进入一个精彩的互联网世界
- Microsoft Edge 收藏夹如何显示在界面上方?
- Oracle Linux 8.5上架微软商店;英特尔发力 RISC-V;200 亿参数 GPT-NeoX 即将开源 | 开源日报
- 项目非组件文件进行路由跳转【react与vue等其他框架均可使用】
- firebox插件制作
- Vue3-pinia(状态管理)