Java中迪米特原则是什么
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,小编给大家分享一下Java中迪米特原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是迪米特原则?一个对象应
千家信息网最后更新 2025年11月07日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 List getAllEmployee() { 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 List getAllEmployee() { 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安全错误
数据库的锁怎样保障安全
erp服务器安装
怎么使用c 里的数据库
服务器bmc测试
免流服务器被攻击
网络安全保卫大队照片
数据库问题及回答技巧
网络安全与技术杂志版面费
为什么苹果服务器出现问题
连接数据库要关哪些防火墙
普陀区服务软件开发口碑推荐
中国劳动力人口调查数据库
网络安全人才培养新模式
温州外协加工软件开发费用
软件开发奖项设置
厦门国际银行软件开发经理
美国网络安全最牛的人
我的世界服务器崩溃了
长夜不休是哪个渠道的服务器
举报平台的网络安全管理
access数据库实例
服务器管理平台怎么样
软件开发工程师证书样本
计算机网络技术基础作业题
东城ibm服务器回收
前端用数据库哪个好用
藏语翻译软件开发
vb 取随机不重复数据库
护苗网络安全课教学视频
温州外协加工软件开发费用
连接数据库的操作命令