Java中迪米特原则是什么
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,小编给大家分享一下Java中迪米特原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是迪米特原则?一个对象应
千家信息网最后更新 2025年01月21日Java中迪米特原则是什么
小编给大家分享一下Java中迪米特原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
1.什么是迪米特原则?
一个对象应该对其他对象保持最少的了解。
类与类关系越密切,耦合度越大。
迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息。
迪米特法则还有个更简单的定义:只与直接的朋友通信。
直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。
2.违反迪米特原则代码案例
代码中的注释我已经写的很详细了,大家有问题即可指出。
package com.szh.principle.demeter; import java.util.ArrayList;import java.util.List; /** * *///学校总部员工类class Employee { private String id; public void setId(String id) { this.id = id; } public String getId() { return id; }} //学院的员工类class CollegeEmployee { private String id; public void setId(String id) { this.id = id; } public String getId() { return id; }} //管理学院员工的管理类class CollegeManager { //返回学院的所有员工 public ListgetAllEmployee() { List list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { //这里我们增加了5个员工到 list CollegeEmployee emp = new CollegeEmployee(); emp.setId("学院员工id= " + i); list.add(emp); } return list; }} //学校管理类//分析 SchoolManager 类的直接朋友类有哪些: Employee、CollegeManager//CollegeEmployee 不是 直接朋友, 而是一个陌生类, 这样违背了 迪米特法则class SchoolManager { //返回学校总部的员工 public List getAllEmployee() { List list = new ArrayList<>(); for (int i = 1; i <=3 ; i++) { //这里我们增加了3个员工到 list Employee emp = new Employee(); emp.setId("学校总部员工id= " + i); list.add(emp); } return list; } //该方法完成输出学校总部和学院员工信息(id) void printAllEmployee(CollegeManager sub) { //分析问题 //1. 这里的 CollegeEmployee 不是 SchoolManager 的直接朋友 //2. CollegeEmployee 是以局部变量方式出现在 SchoolManager //3. 违反了 迪米特法则 //获取到学院员工 List list1 = sub.getAllEmployee(); System.out.println("------------学院员工------------"); list1.stream().map(CollegeEmployee::getId).forEach(System.out::println); //获取到学校总部员工 List list2 = this.getAllEmployee(); System.out.println("------------学校总部员工------------"); list2.stream().map(Employee::getId).forEach(System.out::println); }} public class Demeter { public static void main(String[] args) { //创建了一个 SchoolManager 对象 SchoolManager schoolManager = new SchoolManager(); //输出学院的员工id 和 学校总部的员工信息 schoolManager.printAllEmployee(new CollegeManager()); }}
3.遵守迪米特原则代码案例
前面设计的问题在于SchoolManager 中,CollegeEmployee 类并不是SchoolManager类的直接朋友。
按照迪米特法则,应该避免类中出现这样非直接朋友关系的耦合。我们将上面的代码进行修改,使其遵守迪米特原则。
package com.szh.principle.demeter.improve; import java.util.ArrayList;import java.util.List; /** * *///学校总部员工类class Employee { private String id; public void setId(String id) { this.id = id; } public String getId() { return id; }} //学院的员工类class CollegeEmployee { private String id; public void setId(String id) { this.id = id; } public String getId() { return id; }} //管理学院员工的管理类class CollegeManager { //返回学院的所有员工 public ListgetAllEmployee() { List list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { //这里我们增加了5个员工到 list CollegeEmployee emp = new CollegeEmployee(); emp.setId("学院员工id= " + i); list.add(emp); } return list; } //输出学院员工的信息 public void printEmployee() { //获取到学院员工 List list1 = getAllEmployee(); System.out.println("------------学院员工------------"); list1.stream().map(CollegeEmployee::getId).forEach(System.out::println); }} //学校管理类//分析 SchoolManager 类的直接朋友类有哪些: Employee、CollegeManager//CollegeEmployee 不是 直接朋友, 而是一个陌生类, 这样违背了 迪米特法则class SchoolManager { //返回学校总部的员工 public List getAllEmployee() { List list = new ArrayList<>(); for (int i = 1; i <= 3; i++) { //这里我们增加了3个员工到 list Employee emp = new Employee(); emp.setId("学校总部员工id= " + i); list.add(emp); } return list; } //该方法完成输出学校总部和学院员工信息(id) void printAllEmployee(CollegeManager sub) { //分析问题 //改进代码:将输出学院的员工方法,封装到CollegeManager sub.printEmployee(); //获取到学校总部员工 List list2 = getAllEmployee(); System.out.println("------------学校总部员工------------"); list2.stream().map(Employee::getId).forEach(System.out::println); }} public class Demeter { public static void main(String[] args) { System.out.println("~~~使用迪米特法则的改进~~~"); //创建了一个 SchoolManager 对象 SchoolManager schoolManager = new SchoolManager(); //输出学院的员工id 和 学校总部的员工信息 schoolManager.printAllEmployee(new CollegeManager()); }}
4.迪米特原则的注意事项
迪米特法则的核心是降低类之间的耦合。
但是注意:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系。
以上是"Java中迪米特原则是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
员工
学院
迪米特
学校
总部
朋友
对象
法则
原则
耦合
信息
方法
管理
输出
代码
变量
问题
分析
之间
局部
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
sql数据库三组数据分组
计算机网络技术对口岗位
r3100作服务器
网络安全法的六个亮点
服务器不断重启
国外对中国文化数据库
在线数据库优化
网络安全定级专家论证
河南中天浩然网络技术有限公司
pda连接数据库超时
腾讯视频网络服务器是多少
事务 数据库是什么
er图和数据库表什么关系
mysql修改数据库库名称
网络安全面临哪些问题
监听器消费数据库
网络安全的测试工具
存储服务器硬盘绿灯闪烁和常亮
激战2不同服务器能邮寄道具吗
山西通用软件开发近期价格
数据库单个查询的语句
绘制四种以上软件开发模型
4g网络安全的目标
怀旧服新服务器改造
浙江炒币量化交易软件开发报价
软件开发就业去向与前程
网络技术详解
路由器升thtp服务器
庆阳软件开发
ibm服务器加不了电