设计模式(十二)迪米特原则(最少知识原则)

简介: 迪米特(最少知识)法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

QQ图片20220424160209.jpg

迪米特(最少知识)法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。


根本思想是:强调了类之间的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。


这个法则体现的是“高内聚,低耦合”的设计思想。


举个例子:我刚到公司上班,电脑坏了,需要技术部派人来给我修电脑,我不需要认识来给我修电脑的人是谁,我只需要认识技术部门的主管,具体他拍谁来给我修电脑,那是他的事。我的目的是赶紧把电脑修好。下面我们使用代码来实现这个小例子。


维修类:repair.cs


namespace Dimiter
{
    /// <summary>
    /// 维修抽象类
    /// </summary>
    public abstract class repair
    {
        public abstract bool RepairComputer();
    }
}


维修技术小王类xiaowang.cs


namespace Dimiter
{
    /// <summary>
    /// 维修技术小王类
    /// </summary>
    public class xiaowang:repair
    {
        public override bool RepairComputer()
        {
            return false;
        }
    }
}


维修技术小李类xiaoli.cs


namespace Dimiter
{
    /// <summary>
    /// 维修技术小李类
    /// </summary>
    public class xiaoli:repair
    {
        public override bool RepairComputer()
        {
            return true;
        }
    }
}


技术部主管类director.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dimiter
{
    /// <summary>
    /// 主管类
    /// </summary>
    public class director
    {
        public bool res;
        public void CallRepair()
        {
            repair xiaowang = new xiaowang();
            res = xiaowang.RepairComputer();
            if (res)
            {
                Console.WriteLine("小王去给你修电脑了");
                return;
            }
            repair xiaoli = new xiaoli();
            res = xiaoli.RepairComputer();
            if (res)
            {
                Console.WriteLine("小李去给你修电脑了");
                return;
            }
            Console.WriteLine("我来了。");
        }
    }
}


客户端调用:Program.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dimiter
{
    /// <summary>
    /// 客户端
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            // 我只需要联系技术部门主管就可以了,具体他安排谁来给我修电脑。
            // 怎么安排的,跟我没有关系,我的目的是吧电脑修好
            director dir = new director();
            dir.CallRepair();
            Console.ReadLine();
        }
    }
}


输出结果如下图所示:


QQ图片20220424161219.jpg


总结一下:迪米特法则的优缺点


优点:


1:  迪米特法则的做法观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用率才可以提高。


缺点:


1: 造成系统的不同模块之间的通信效率降低,使系统的不同模块之间不容易协调等缺点。


2:因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,大大增加了系统的复杂度。


3: 解决这个问题的方式是:使用依赖倒转原则(通俗的讲就是要针对接口编程,不要针对具体编程), 这要就可以是调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友。



目录
相关文章
|
2月前
|
设计模式
设计模式七大原则
这篇文章介绍了设计模式中的七大原则,特别强调了单一职责原则,即一个类应该只有一个引起其行为变化的原因,以确保类功能的高内聚和低耦合。
|
2月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
26天前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
设计模式——设计模式简介和七大原则
|
4月前
|
设计模式 供应链
设计模式六大原则之迪米特法则
设计模式六大原则之迪米特法则
|
2月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
2月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
2月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
|
4月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
29 2
|
4月前
|
设计模式 Java 数据库
深入理解设计模式六大原则
深入理解设计模式六大原则
|
4月前
|
设计模式 数据可视化 程序员
设计模式学习心得之前置知识 UML图看法与六大原则(上)
设计模式学习心得之前置知识 UML图看法与六大原则(上)
34 0