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

相关推荐
小oo呆44 分钟前
【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核
python·jupyter·conda
ghost1432 小时前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
小白学大数据2 小时前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街2 小时前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋67892 小时前
用Python绘制梦幻星空
开发语言·python·pygame
alpszero2 小时前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11
白云千载尽2 小时前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros
咕噜咕噜啦啦3 小时前
python爬虫实战训练
爬虫·python
盛夏绽放3 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2613 小时前
Python训练营打卡DAY27
开发语言·python·机器学习