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() {}
    }

     

  • 相关阅读:
    document基本操作 动态脚本-动态样式-创建表格
    js原型模式和继承
    NuGet本地包自定义路径
    技术文档链接收藏
    数据结构排序
    Insertion Sort
    选择排序之javascript
    冒泡排序之javascript
    C++双向链表
    单向链表
  • 原文地址:https://www.cnblogs.com/hachun/p/3584267.html
Copyright © 2011-2022 走看看