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常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/hachun/p/3584267.html
Copyright © 2011-2022 走看看