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

发布时间:2019-07-25 09:11:40 阅读:56

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

     

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

     

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

     

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

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

     

    输出结果如下图所示:

    12122.png

     

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

    优点:

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

     

    缺点:

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

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

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

     

    有好的建议,请在下方输入你的评论。

资源下载: