设计模式:迪米特法则(Law of Demeter,LoD)介绍

迪米特法则(Law of Demeter,LoD),也称为最少知识原则(Least Knowledge Principle,LKP),是面向对象设计原则之一,它强调一个对象应该对其他对象有尽可能少的了解,不要和陌生对象直接通信,而是通过中间对象来进行间接通信。简单来说,一个对象应该对其他对象保持最小的了解,只与直接相关的对象进行交互。

迪米特法则的实现原理可以通过以下几点来说明:

  1. 封装对象的行为: 对象应该将自己的行为封装在内部,对外暴露少量的接口来提供服务。这样可以降低对象之间的耦合度,减少对象对其他对象的了解。

  2. 通过中间对象进行通信: 如果一个对象需要与其他对象进行通信,应该通过中间对象来进行间接通信,而不是直接调用陌生对象的方法或访问其属性。

  3. 避免过度依赖: 对象之间的关系应该简单明了,避免过度依赖其他对象的细节,保持对象之间的松耦合关系。

在 Python 中,实现迪米特法则可以通过以下方式:

python 复制代码
# Mediator 类充当中介者,负责协调 person1 和 person2 之间的通信
class Mediator:
    def __init__(self):
        self.person1 = Person1(self)
        self.person2 = Person2(self)

    def notify(self, sender, msg):
        if sender == self.person1:
            self.person2.receive_msg(msg)
        elif sender == self.person2:
            self.person1.receive_msg(msg)

'''
每个同事类(Person1 和 Person2)只知道中介者对象,
不直接与其他同事对象通信,而是通过中介者来进行消息传递
减少对象之间的直接依赖
'''
class Person1:
    def __init__(self, media):
        self.media = media
    def send_msg(self, msg):
        self.media.notify(self, msg)
    def receive_msg(self, msg):
        print(f'person1 receive message: {msg}')

class Person2:
    def __init__(self, media):
        self.media = media
    def send_msg(self, msg):
        self.media.notify(self, msg)
    def receive_msg(self, msg):
        print(f'person2 receive message: {msg}')


mediator = Mediator()

mediator.person1.send_msg('p1_message')

运行结果:

person2 receive message: p1_message

相关推荐
@HNUSTer6 分钟前
Python数据可视化科技图表绘制系列教程(八)
python·数据可视化·科技论文·专业制图·科研图表
专注仿真1 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
满怀冰雪2 小时前
22-使用 PaddleClas 快速训练图像分类模型
人工智能·python·机器学习·分类·数据挖掘·paddlepaddle
gb42152872 小时前
python中Web应用服务器
开发语言·前端·python
reasonsummer3 小时前
【办公类-109-12】20260901圆形挂牌(模版重制:文本框圆形重叠_word编辑单面_接送卡&被子卡&床卡&入园卡)
python·word
名明鸣冥3 小时前
k8s-agent架构思考(一)
python
DoLovya4 小时前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
AI情绪识别开源4 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
极创信息4 小时前
国产化信创适配认证高频术语:信创适配、软件自主可控、国产化率、代码溯源率、代码自主率、代码开源率是什么?
java·python·struts·eclipse·开源·php·hibernate
AC赳赳老秦5 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw