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

16 篇文章 0 订阅
16 篇文章 0 订阅

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

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

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

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

维修类: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();
        }
    }
}

输出结果如下图所示:

在这里插入图片描述

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

优点:

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

缺点:

1: 造成系统的不同模块之间的通信效率降低,使系统的不同模块之间不容易协调等缺点。
:2:因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,大大增加了系统的复杂度。
3: 解决这个问题的方式是:使用依赖倒转原则(通俗的讲就是要针对接口编程,不要针对具体编程), 这要就可以是调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友。

有好的建议,请在下方输入你的评论。
欢迎访问个人博客
https://guanchao.site

欢迎访问小程序:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值