迪米特法则(lawofdemeter)

迪米特法则(Law of Demeter)

迪米特法则(Law of Demeter)也叫最少知识原则(Least Knowledge Principle),它是一种面向对象设计原则,旨在降低软件系统中对象之间的耦合度。

定义

迪米特法则是说,一个对象应该仅与其密切的朋友交流,而不与陌生人交流。所谓的“朋友”,是指直接依赖的对象,包括以下几种:

  1. 该对象本身
  2. 被当作参数传入的对象
  3. 此方法的返回值
  4. 此方法所创建或实例化的对象

优点

迪米特法则可以帮助降低系统中的耦合度,提高系统的可维护性、可拓展性、可读性、稳定性和重用性。当系统中各个对象之间的关系合理、紧密且清晰明了时,就可以更容易地对系统进行维护、修改、扩展以及重构。

如何实现

实现迪米特法则的关键在于尽量减少对象之间的直接依赖关系,可以采用如下方法:

  1. 将某些公共操作封装起来,转化为共享模块。
  2. 尽量减少对象的行为,尽量保持属性的简单,并用该属性避免方法调用。
  3. 在创建对象时,尽量将对象的信息注入到对象内部,而不是在外部直接操作,从而减少对象之间的交互。

实例

下面给出一个违反迪米特法则的例子:

class A:
    def __init__(self):
        self.b = B()

    def do_something(self):
        self.b.action()


class B:
    def __init__(self):
        self.c = C()

    def action(self):
        self.c.action()


class C:
    def action(self):
        print('Do something in C')

a = A()
a.do_something()

以上代码中,类A直接调用了类B和类C的方法,从而导致A、B、C之间的联系非常紧密。如果要对其中任何一个类进行修改,会引起整个系统的变化,这样就会变得非常困难和危险。

现在,我们来修改一下代码,使其符合迪米特法则:

class A:
    def __init__(self, b):
        self.b = b

    def do_something(self):
        self.b.action()


class B:
    def __init__(self):
        self.c = C()

    def action(self):
        self.c.action()


class C:
    def action(self):
        print('Do something in C')

c = C()
b = B()
a = A(b)
a.do_something()

我们将B类的实例化移到了外部,让外部来负责实例化并注入给A类,从而实现了A、B、C之间的松耦合,也更容易进行单元测试。这个模式常常被称为依赖注入或控制反转(Dependency Injection, Inversion of Control, IOC)。

总结

迪米特法则是一种十分实用的面向对象设计原则,能使软件系统更稳定、可扩展和可读,同时也提高了系统的可维护性和重用性。当系统中各个对象之间的关系合理、紧密且清晰明了时,才能更容易地对系统进行维护、修改、扩展以及重构。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:迪米特法则(lawofdemeter) - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • vmware虚拟机下ubuntu安装vmwaretools详解

    安装VMware Tools的完整攻略 步骤一:在Ubuntu虚拟机中挂载VMware Tools 首先,在VMware虚拟机的“虚拟机”菜单中,找到并选择“安装VMware Tools”选项,然后会在Ubuntu系统中出现一个名为“VMware Tools”的ISO映像文件。 接着,在Ubuntu系统的终端中输入以下命令,创建用于挂载ISO映像文件的目录:…

    其他 2023年4月16日
    00
  • 魔兽世界wlk怀旧服刺杀贼堆什么属性 刺杀贼属性优先级选择攻略

    魔兽世界wlk怀旧服刺杀贼堆什么属性 魔兽世界wlk怀旧服刺杀贼作为一个非常重要的dps职业,属性堆放尤为重要,因为属性的选择直接影响到刺杀贼的输出能力。所以在刺杀贼属性的选择上,需要掌握一些基本的优先级原则。 刺杀贼的属性优先级 在魔兽世界wlk怀旧服中,刺杀贼的属性优先级如下: 爆击率(Crit chance) 硬直/突袭伤害(Ambush/backst…

    other 2023年6月27日
    00
  • 详解小程序如何改变onLoad的执行时机

    首先需要了解小程序的生命周期,onLoad是在页面加载时执行的函数,而且是在onShow之前执行。在页面初始化时,onLoad只会执行一次,此后通过页面跳转时,如果页面还在缓存中,则不会再次执行onLoad函数。 想要改变onLoad的执行时机,需要在页面的options中添加isReload参数,通过判断isReload参数的值来决定是否需要重新加载页面。…

    other 2023年6月27日
    00
  • xcode7模拟器安装app

    Xcode7模拟器安装App完整攻略 在iOS开发中,我们通常使用Xcode来开发和调试应用程序。Xcode提供了模拟器功能,可以模拟不同的iOS设备和操作系统版本,方便我们进行应用程序的和调试。本攻略将详细介绍如何在Xcode7模拟器中安装App,包括基本概念、安装配置和示例说明。 基本概念 Xcode是苹果公司开发的一款集成开发环境(IDE),用于开发i…

    other 2023年5月6日
    00
  • wps会员与wps+企业云办公

    以下是WPS会员和WPS+企业云办公的完整攻略: 1. WPS会员 WPS会员是WPS Office的付费服务,提供了更多的高级功能和云服务。以下WPS会员的主要功能: 无广告 PDF转换 云文档 云存储 云协作 VIP客服 要使用WPS会员,您需要先购买会员。可以在WPS官网或WPS Office应用程序中购买会员。购买后,您可以WPS Office应用程…

    other 2023年5月8日
    00
  • 详解Linux下Tomcat开启查看GC信息

    下面是“详解Linux下Tomcat开启查看GC信息”的完整攻略,包含以下步骤: 1. 下载并安装JDK 首先需要在Linux系统上下载并安装Java Development Kit (JDK),以便在后续的步骤中使用。可以通过官方网站或者包管理软件来下载并安装。 2. 安装Tomcat服务器 如若未安装Tomcat服务器,需要下载并安装。下载官方二进制包,…

    other 2023年6月27日
    00
  • windows10正式版原版镜像!(备忘)

    以下是详细讲解“Windows 10正式版原版镜像!(备忘)”的完整攻略,过程中包含两条示例说明: Windows 10正式版原版镜像!(备忘) 在安装Windows 10操作系统时,我们需要使用Windows 10正式版原版镜像。以下是获取Windows 10正式版原版镜像的方法: 1. 从Microsoft官网下载 Microsoft官网提供了Windo…

    other 2023年5月10日
    00
  • fastDFS文件服务器迁移

    FastDFS文件服务器迁移 FastDFS是一个开源的分布式文件系统,具有高性能、高可靠性、易部署、易扩展等特点,被广泛应用于大规模文件存储场景。但是,在实际使用过程中,我们难免会遇到需要迁移FastDFS文件服务器的情况,本文将介绍FastDFS文件服务器迁移的相关操作和注意事项。 迁移前准备工作 在进行FastDFS文件服务器的迁移之前,我们需要进行以…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部