设计模式:迪米特法则(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

相关推荐
程序员杰哥12 分钟前
如何用Postman做接口自动化测试?
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
xxxxxmy26 分钟前
同向双指针(滑动窗口)
python·算法·滑动窗口·同向双指针
测试199832 分钟前
selenium自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
勇气要爆发40 分钟前
【第一阶段—基础准备】第五章:Python模块和包管理(基础篇)—变形金刚的装备库
开发语言·python
学历真的很重要1 小时前
PyTorch 机器学习工作流程基础 - 完整教程
人工智能·pytorch·后端·python·深度学习·机器学习·面试
小白学大数据2 小时前
基于文本检测的 Python 爬虫弹窗图片定位与拖动实现
开发语言·爬虫·python
努力的BigJiang2 小时前
ORB-SLAM2在ubuntu20.04中的复现记录(跑数据集+ROS)(ROS接口失败版)
python
计算机学姐3 小时前
基于Python的商场停车管理系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
ujainu3 小时前
Flutter + HarmonyOS开发:轻松实现ArkTS页面跳转
人工智能·python·flutter
小猪快跑爱摄影3 小时前
【AutoCad 2025】【Python】零基础教程(一)——简单示例
开发语言·python