• [设计模式原则]第五回:迪米特原则


    1.引言

    迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也可能发生变化。

    2.引经据典

    核心思想:最少依赖

    具体体现:

    • 类内部应该高内聚,设置相应的权限,有选择的暴露方法,这就是封装的奥秘。
    • 类的依赖关系尽量减少,保持简单和独立,降低耦合。

    一些理解,有些东西,可以适当的知道,知道的太多对你不好。关系越复杂,人越不敢接近你。要达到很高的内修养,才能有很好的表现。这些江湖术语都包含一些哲理。

    3.应用反思

        //电灯
        public class Light
        {
            public void TurnOn()
            {
                if (LifeOver())
                    Console.WriteLine("灯泡亮了");
            }
    
            public void TurnOff()
            {
                Console.WriteLine("灯泡黑了");
            }
    
            public bool LifeOver()
            {
                Console.WriteLine("寿命还在");
                return true;
            }
        }
        //电灯开关
        public class Switch
        {
            public void TurnOn()
            {
                Light light= new Light();
                Console.WriteLine("打开开关");
                light.TurnOn();
            }
    
            public void TurnOff()
            {
                Light light = new Light();
                Console.WriteLine("关上开关");
                light.TurnOff();
            }
        }

    上面的两个类 都违反了迪米特原则,Light的LifeOver是一个内部判断的问题,如果外部不需要知道,可以声明为 private。Switch类的两个方法都使用Light,只是一个局部变量,就有两处依赖,可以声明为一个类的成员变量,减少一个依赖。如下:

       //电灯
        public class Light
        {
            public void TurnOn()
            {
                if (LifeOver())
                    Console.WriteLine("灯泡亮了");
            }
    
            public void TurnOff()
            {
                Console.WriteLine("灯泡黑了");
            }
    
            private bool LifeOver()
            {
                Console.WriteLine("寿命还在");
                return true;
            }
        }
        //电灯开关
        public class Switch
        {
            Light light = new Light();
    
            public void TurnOn()
            {
                Console.WriteLine("打开开关");
                light.TurnOn();
            }
    
            public void TurnOff()
            {
                Console.WriteLine("关上开关");
                light.TurnOff();
            }
        }

    4.规则建议

    • 在类的划分上,应当创建弱耦合的类,类与类之间的耦合越弱,就越有利于实现可复用的目标。
    • 在类的结构设计上,每个类都应该降低成员的访问权限。
    • 在类的设计上,只要有可能,一个类应当设计成不变的类。
    • 在对其他类的应用上,一个对象对其他类的对象的应用应该降到最低。
    • 尽量限制局部变量的有效范围。

    作者:Qlin
    出处:http://www.cnblogs.com/qqlin/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    80.常用的返回QuerySet对象的方法使用详解:order_by
    79.常用的返回QuerySet对象的方法使用详解: filter, exclude,annotate
    78.objects对象所属类原理分析
    69.ORM查询条件:isnull和regex的使用
    北邮 自考 互联网及其应用 考核指导
    北邮 自考 Java语言程序设计(一) 考核指导
    计算机网络自考群
    电气工程及自动化 (独立本科) 自考
    清华大学 研究生 培养方案
    windows10 M557 连接 匹配
  • 原文地址:https://www.cnblogs.com/qqlin/p/2829481.html
Copyright © 2020-2023  润新知