首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度解析迪米特原则:降低耦合,提高模块独立性

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

作者头像
coderidea
发布于 2023-11-19 07:29:12
发布于 2023-11-19 07:29:12
5980
举报
文章被收录于专栏:coderideacoderidea

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

理解迪米特原则

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

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

迪米特原则的应用

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

示例 1: 学生选课系统

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

代码语言:javascript
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
遵循SOLID原则:构建高内聚低耦合的代码
SOLID原则是面向对象设计的五个基本原则,它们可以指导我们在实际项目中遵循最佳实践。
陆业聪
2024/07/23
3650
遵循SOLID原则:构建高内聚低耦合的代码
C#设计原则——迪米特原则
一、定义创建一个类时要采用的一套原则。要求一个对象对其他对象有最少的了解。降低类之间的耦合。二、代码违反迪米特原则的代码: //电脑:关机的行为、 public class Computer { //1.保存当前程序 public void SaveCurrentTask() { Console.WriteLine("保存当前程序"); }
用户10053120
2022/09/19
2670
面向对象的7种设计原则(6)-迪米特原则
迪米特法则,如果两个类不必彼此直接通向,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个累哦的某一个方法的话,可以通过第三者转发这个调用。
一觉睡到小时候
2020/08/17
6190
面向对象的7种设计原则(6)-迪米特原则
面象对象设计6大原则之六:迪米特原则
迪米特原则(LOD),The Law Of Demeter,也称为最少知识原则 定义 一个对象应该对其他对象有最少的了解。 也就是说一个类耦合和调用一个类应该知道的最少,它只关心被耦合和调用的类的公共方法,而被耦合和调用的类如何复杂它并不关心。这在另一程度也说明类方法的最小权限性,不要随意定义public公开方法,你只公开你需要公开的。 迪米特原则对类的低耦合度提出了以下几点要求: 1、只和朋友类交流 类与类之间的交流无需知道内部结构,其内部与其他陌生类打交道我并不关心。 2、朋友类之间的距离 一个类公
Java技术栈
2018/03/30
6460
07.迪米特原则介绍
迪米特法则。尽管它不像 SOLID、KISS、DRY 原则那样,人尽皆知,但它却非常实用。利用这个原则,能够帮我们实现代码的“高内聚、松耦合”。
杨充
2025/03/19
1790
这代码,够优雅!
最近公司团队每两周进行一次Code Review,了不起心里有点慌,毕竟平常都不注重代码的开发规范,更别说代码的可读性、可维护性了,心里想着就是能跑起来就行。这不,偷偷做了点关于代码规范和编程原则的功课,暗地里把公司的代码重构了一遍,避免在Code Review时被领导喷。本文将会介绍一些编程设计原则,以帮助各位好汉编写出更健壮、可维护的代码。
灬沙师弟
2023/12/01
2740
这代码,够优雅!
【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
代码实现的层面最佳做法 : 尽量不要对外公开太多的 public 方法 , 和 public 变量 , 尽量内敛 , 多使用 private / protected 权限 ;
韩曙亮
2023/03/29
4970
软件架构设计原则--迪米特原则
  迪米特原则(Law of Demeter,LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。   迪米特原则主要强调:只和朋友交流,不与陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以被称为成员朋友类,二出现在方法体内部的类不属于朋友类。   假设现在来设计一个权限系统,Boss需要查看目前发布到线上的课程数量。这时,Boss要找到Leader去统计,leader再把统计结果告诉boss,还是以代码讲解: 课程Course类:
向着百万年薪努力的小赵
2022/12/02
3050
软件架构设计原则--迪米特原则
面向对象的设计原则-"迪米特原则"
Least Knowledge Principle LKP,"迪米特原则":一个对象应该对其他对象有最少的了解。通俗的说就是,一个类应该对自己需要耦合或调用的类知道的最少,你(被耦合或调用的类)的内部是如何的复杂和我没关系,我就知道你提供这么多的public方法,我就调用这么多方法,其他的我一概不关心。
别明天就今天吧
2020/09/07
4550
设计模式 - 六大设计原则之LoD(迪米特法则原则)
迪米特法(Law Of Demeter , LoD)则又叫最少知道原则(Least Knowledge Principle),最早是在1987年由美国Northeastern University的Ian Holland提出。
小小工匠
2023/02/23
5840
设计模式 - 六大设计原则之LoD(迪米特法则原则)
设计模式 ☞ 七大设计原则之迪米特法则
  迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学的一个名为迪米特的研究项目,由伊恩·荷兰提出,被 UML 创始者之一的布奇普及,后来又因为在经典著作《程序员修炼之道》提及而广为人知。迪米特法则的定义是:只与你的直接朋友交谈,不跟 “陌生人” 说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。   迪米特法则中的 “朋友” 是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。需要注意的是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。
Demo_Null
2020/12/21
1.1K0
设计模式—— 五:迪米特原则
迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下:
三分恶
2020/07/16
1.2K0
面向对象的七大设计原则
1. 单一职责原则(Single Responsibility Principle) 每一个类应该专注于做一件事情。 每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。需要说明的一点是单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都需要遵循这一重要原则。 2. 里氏替换原则(Liskov Substitution Prin
房上的猫
2018/03/14
2.1K0
万字总结之设计模式(扫盲篇)
上篇说了反射,将其作为框架的基础知识。还没看过的移至传送门,参考我之前的文章万字总结之反射(框架之魂)。
陈琛
2020/06/12
5780
万字总结之设计模式(扫盲篇)
深度思考:到底什么是抽象?
一、单一职责原则(SRP: Single responsibility principle)
闫同学
2022/10/31
5170
深度思考:到底什么是抽象?
软件工程六大设计原则总结,案例演示
一、单一职责原则 1、概念描述 对类来说的,即一个类应该只负责一项职责。如果一个类负责两个职责,可能存在职责1变化,引起职责2变化的情况。可以基于抽象逻辑,或者业务逻辑对类进行细化。 2、案例演示 这里基于方法和类的细化都可以,可以根据实际业务选择。 class Animal { public void dogVoice (){ System.out.println("狗叫声:旺旺"); } public void cowVoice (){ Syste
知了一笑
2019/12/03
4130
通过简单代码示例了解七大软件设计原则
本文档设计源码地址:https://gitee.com/daijiyong/SoftwareDesignPrinciples
你好戴先生
2020/09/03
7900
优雅代码的秘密,都藏在这6个设计原则中
优雅的代码,犹如亭亭玉立的美女,让人赏心悦目。而糟糕的代码,却犹如屎山,让人避而远之。
捡田螺的小男孩
2022/12/29
9620
优雅代码的秘密,都藏在这6个设计原则中
一文读懂何为高内聚低耦合
在软件开发中,耦合是指两个或多个模块之间的依赖程度。当一个模块的改变会影响到另一个模块时,说明这两个模块是耦合的。耦合程度越高,模块之间的依赖性越强,意味着更改一个模块时可能会带来连锁反应,影响到其他模块的功能和行为。
Srlua
2024/10/16
3.2K0
一文读懂何为高内聚低耦合
迪米特法则:降低耦合,提升代码质量与可维护性
欢迎大家莅临我的博客!在今天的文章中,我们将深入探讨一项在软件设计中至关重要的原则——迪米特法则(Law of Demeter)。迪米特法则,也被称为“最少知识原则”,在面向对象设计中具有显著的指导作用,其目标在于降低系统内部各模块之间的耦合性,从而提升代码质量和可维护性。
IT_陈寒
2023/12/13
3750
迪米特法则:降低耦合,提升代码质量与可维护性
推荐阅读
相关推荐
遵循SOLID原则:构建高内聚低耦合的代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档