Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度解析迪米特原则:降低耦合,提高模块独立性

深度解析迪米特原则:降低耦合,提高模块独立性

作者头像
coderidea
发布于 2023-11-19 07:29:12
发布于 2023-11-19 07:29:12
54900
代码可运行
举报
文章被收录于专栏:coderideacoderidea
运行总次数:0
代码可运行

迪米特原则(Law of Demeter,LoD),也被称为最少知识原则(Principle of Least Knowledge,PoLK),是面向对象编程中的一个重要原则。它的核心思想是降低模块之间的耦合,提高模块的独立性。在本文中,我们将深入探讨迪米特原则的概念、原则、应用、示例和最佳实践。

理解迪米特原则

迪米特原则的核心思想可以总结为“不要和陌生人说话”。具体来说,它有以下几个重要观点:

  1. 一个对象应该对其他对象知之甚少,只与朋友通信。这里的“朋友”指的是直接的关联对象。
  2. 不要与陌生对象产生直接的耦合,要减少对象之间的通信。降低耦合性,提高模块的独立性。
  3. 如果一个模块需要调用其他模块的方法,应当通过本模块的朋友进行调用,不要直接与陌生模块通信。

迪米特原则的应用

迪米特原则的应用有助于降低系统的复杂性,提高模块的可维护性和可扩展性。以下是一些迪米特原则的应用示例:

示例 1: 学生选课系统

假设我们正在构建一个学生选课系统,系统包括学生、课程、教师和课程表等类。如果我们遵循迪米特原则,学生类不应该直接调用课程或教师的方法,而应当通过课程表进行调用。这样可以降低学生类与课程和教师类的耦合,提高系统的可维护性和扩展性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student {
 
 private String name;
 

 
 public Student(String name) {
 
 this.name = name;
 
 }
 

 
 public void selectCourse(Course course) {
 
 // 学生选择课程
 
 CourseTable.select(this, course);
 
 }
 
}
 

 
class Course {
 
 private String name;
 
 private Teacher teacher;
 

 
 public Course(String name, Teacher teacher) {
 
 this.name = name;
 
 this.teacher = teacher;
 
 }
 

 
 // ...
 
}
 

 
class Teacher {
 
 private String name;
 

 
 // ...
 
}
 

 
class CourseTable {
 
 public static void select(Student student, Course course) {
 
 // 学生选课
 
 // 可以在这里实现选课逻辑
 
 }
 
}
 

在上述示例中,学生类不直接与课程或教师类通信,而是通过课程表类进行调用,遵循了迪米特原则。

示例 2: 软件模块设计

在软件模块的设计中,遵循迪米特原则有助于降低模块之间的依赖关系。模块之间的通信应当通过接口或抽象类来进行,而不是直接依赖于具体的实现。这可以提高模块的可替代性,使系统更容易维护和扩展。

最佳实践

在实践中,遵循迪米特原则的最佳实践可以帮助我们设计出更加松耦合、高内聚的系统。以下是一些最佳实践建议:

  1. 定义接口和抽象类:在模块之间引入接口和抽象类,以作为通信的契约。
  2. 封装对象内部状态:将对象的内部状态封装起来,只暴露必要的接口供外部模块调用。
  3. 避免链式调用:避免过多的链式调用,尽量减少模块之间的依赖关系。
  4. 使用依赖注入:使用依赖注入模式来管理模块之间的依赖关系,使模块更易替换。
  5. 避免全局变量:避免使用全局变量,以减少模块之间的直接依赖。
  6. 单一职责原则:确保每个模块只有一个职责,降低内部复杂度。

总结

迪米特原则是一项重要的面向对象编程原则,有助于降低系统的耦合性,提高模块的独立性。通过减少模块之间的直接依赖,可以更容易地维护和扩展软件系统。在实际编程中,深刻理解迪米特原则,将有助于构建更高质量、可维护和可扩展的软件系统。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coderidea 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
07.迪米特原则介绍
迪米特法则。尽管它不像 SOLID、KISS、DRY 原则那样,人尽皆知,但它却非常实用。利用这个原则,能够帮我们实现代码的“高内聚、松耦合”。
杨充
2025/03/19
1210
设计模式—— 五:迪米特原则
迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下:
三分恶
2020/07/16
1.1K0
面向对象的设计原则-"迪米特原则"
Least Knowledge Principle LKP,"迪米特原则":一个对象应该对其他对象有最少的了解。通俗的说就是,一个类应该对自己需要耦合或调用的类知道的最少,你(被耦合或调用的类)的内部是如何的复杂和我没关系,我就知道你提供这么多的public方法,我就调用这么多方法,其他的我一概不关心。
别明天就今天吧
2020/09/07
4180
【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
代码实现的层面最佳做法 : 尽量不要对外公开太多的 public 方法 , 和 public 变量 , 尽量内敛 , 多使用 private / protected 权限 ;
韩曙亮
2023/03/29
4140
C#设计原则——迪米特原则
一、定义创建一个类时要采用的一套原则。要求一个对象对其他对象有最少的了解。降低类之间的耦合。二、代码违反迪米特原则的代码: //电脑:关机的行为、 public class Computer { //1.保存当前程序 public void SaveCurrentTask() { Console.WriteLine("保存当前程序"); }
用户10053120
2022/09/19
2440
设计模式 - 六大设计原则之LoD(迪米特法则原则)
迪米特法(Law Of Demeter , LoD)则又叫最少知道原则(Least Knowledge Principle),最早是在1987年由美国Northeastern University的Ian Holland提出。
小小工匠
2023/02/23
4950
设计模式 - 六大设计原则之LoD(迪米特法则原则)
面向对象的7种设计原则(6)-迪米特原则
迪米特法则,如果两个类不必彼此直接通向,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个累哦的某一个方法的话,可以通过第三者转发这个调用。
一觉睡到小时候
2020/08/17
5860
面向对象的7种设计原则(6)-迪米特原则
面象对象设计6大原则之六:迪米特原则
迪米特原则(LOD),The Law Of Demeter,也称为最少知识原则 定义 一个对象应该对其他对象有最少的了解。 也就是说一个类耦合和调用一个类应该知道的最少,它只关心被耦合和调用的类的公共方法,而被耦合和调用的类如何复杂它并不关心。这在另一程度也说明类方法的最小权限性,不要随意定义public公开方法,你只公开你需要公开的。 迪米特原则对类的低耦合度提出了以下几点要求: 1、只和朋友类交流 类与类之间的交流无需知道内部结构,其内部与其他陌生类打交道我并不关心。 2、朋友类之间的距离 一个类公
Java技术栈
2018/03/30
6240
万字总结之设计模式(扫盲篇)
上篇说了反射,将其作为框架的基础知识。还没看过的移至传送门,参考我之前的文章万字总结之反射(框架之魂)。
陈琛
2020/06/12
5440
万字总结之设计模式(扫盲篇)
【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性
BWH_Steven
2020/10/30
9111
【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
遵循SOLID原则:构建高内聚低耦合的代码
SOLID原则是面向对象设计的五个基本原则,它们可以指导我们在实际项目中遵循最佳实践。
陆业聪
2024/07/23
2490
遵循SOLID原则:构建高内聚低耦合的代码
软件架构设计原则--迪米特原则
  迪米特原则(Law of Demeter,LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。   迪米特原则主要强调:只和朋友交流,不与陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以被称为成员朋友类,二出现在方法体内部的类不属于朋友类。   假设现在来设计一个权限系统,Boss需要查看目前发布到线上的课程数量。这时,Boss要找到Leader去统计,leader再把统计结果告诉boss,还是以代码讲解: 课程Course类:
向着百万年薪努力的小赵
2022/12/02
2710
软件架构设计原则--迪米特原则
深度解析依赖倒置原则:构建松耦合的面向对象软件
依赖倒置原则(Dependency Inversion Principle,DIP)是SOLID原则中的第五条原则,用于指导面向对象编程中的依赖关系管理。DIP的核心思想是“高层模块不应该依赖于低层模块,它们都应该依赖于抽象”,并且“抽象不应该依赖于细节,细节应该依赖于抽象”。本文将深入探讨DIP的概念、原则、应用、示例和最佳实践。
coderidea
2023/11/19
3310
深度解析依赖倒置原则:构建松耦合的面向对象软件
程序员的修仙之路——设计模式六大基本原则
上一篇文章和大家介绍了在软件开发中常见的21种设计模式“程序媛妹妹让我教她养生。我竟然给她推荐了“设计模式之道”!”
灰小猿
2021/09/14
3310
一文读懂何为高内聚低耦合
在软件开发中,耦合是指两个或多个模块之间的依赖程度。当一个模块的改变会影响到另一个模块时,说明这两个模块是耦合的。耦合程度越高,模块之间的依赖性越强,意味着更改一个模块时可能会带来连锁反应,影响到其他模块的功能和行为。
Srlua
2024/10/16
2.2K0
一文读懂何为高内聚低耦合
设计模式六大原则
上篇文章说了工厂模式的单例模式和创建模式,单例模式如何在懒加载的情况下保证线程安全性,创建模式通过接口和抽象类,来完成开闭原则。
keying
2022/12/14
4420
优雅代码的秘密,都藏在这6个设计原则中
优雅的代码,犹如亭亭玉立的美女,让人赏心悦目。而糟糕的代码,却犹如屎山,让人避而远之。
捡田螺的小男孩
2022/12/29
8180
优雅代码的秘密,都藏在这6个设计原则中
深度思考:到底什么是抽象?
一、单一职责原则(SRP: Single responsibility principle)
闫同学
2022/10/31
4390
深度思考:到底什么是抽象?
设计模式之六原则一法则详解
六原则一法则是指开闭原则、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、合成复用原则、迪米特法则。
Java技术债务
2022/08/09
6460
设计模式之六原则一法则详解
这代码,够优雅!
最近公司团队每两周进行一次Code Review,了不起心里有点慌,毕竟平常都不注重代码的开发规范,更别说代码的可读性、可维护性了,心里想着就是能跑起来就行。这不,偷偷做了点关于代码规范和编程原则的功课,暗地里把公司的代码重构了一遍,避免在Code Review时被领导喷。本文将会介绍一些编程设计原则,以帮助各位好汉编写出更健壮、可维护的代码。
灬沙师弟
2023/12/01
2360
这代码,够优雅!
推荐阅读
相关推荐
07.迪米特原则介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验