zoukankan      html  css  js  c++  java
  • 最少知识原则

      该原则也叫作迪米特法则,还是这个名字高大上。。。

      通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。该原则还有一个更简单的定义:只与直接的朋友通信。首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。

      当设计一个系统,不管他是什么对象,我们都需要注意他所交互的类有哪些,并注意这些类是如何交互的。该原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中的一部分,会影响到其他部分。如果许多类之间相互依赖,那么这个系统就会变成一个易碎的系统,维护的成本也随之变得不可估量了。。。

      如何遵守这个原则?

      就任何对象而言,在该对象的方法内,应该调用(综合各种因素,尽量遵守):

      a. 该对象本身;

      b. 被当做方法的参数而传递进来的对象;

      c. 此方法所创建的或实例化的对象;

      d. 对象的任何组件。。。

    代码示例A:(未遵守原则)

    public float GetTemp()
    {
        C c = D.GetC();      
        return c.GetTemperature();
    }

    代码示例B:(遵守原则)

    public float GetTemp()
    {
        return D.GetTemperature();
    }

      对比代码示例A,B。代码示例A中,从对象D中取到对象C,再从对象C中获取温度值;而代码示例B中,直接从对象D中获取温度值,这样可以减少我们所依赖的对象的个数。

    代码示例C:(较全面)

    public class Car
    {
        // 下面注释对应上面的原则(a,b,c,d)
        Engine engine;                       // d   
    
        public Car() {}                              
    
        public void Start(Key key)           // b   
        {
            Doors doors = new Doors();       // c
            boolean bIsOK = key.Turns();     // b
    
            if(bIsOK)
            {
                engine.Start();              // d      
                UpdateDash();                // a  
                doors.Lock();                // c   
            }
        }
    
        public void UpdateDash() {}
    }

     

  • 相关阅读:
    Linux 下没有 my.cnf 文件的解决方式,完全是我自己整的,好多教程都是瞎扯的 (zhuan)
    Virtualbox虚拟机安装CentOS6.5图文详细教程(zhuan)
    virtualbox中centos系统配置nat+host only上网(zhuan)
    VirtualBox的网络配置,Host Only+NAT方式 (zhuan)
    Linux上安装Mysql后除了本机其他机器不能访问的问题(zhuan)
    VirtualBox没有64位选项,无法安装64位的解决方法(zhuan)
    CentOS查看内核版本,位数,版本号 (zhuan)
    datagrid实现单行的选择、取消
    datagrid实现行的上移和下移
    Excel 、数据库 一言不合就转换 (zhuan)
  • 原文地址:https://www.cnblogs.com/hachun/p/3584267.html
Copyright © 2011-2022 走看看