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

    定义

    每个模块只应该了解那些与它关系密切的模块的有限知识,或者说每个模块只和自己的朋友“说话”,不和陌生人“说话”。

    如果把定义中的模块理解为类,则可以这样理解定义:

    不该有直接依赖关系的类之间,不要有依赖,有依赖关系的类之间,尽量只依赖必要的接口

    如何做到最少知识

    对于任何对象而言,在该对象的方法内,只应该调用属于以下范围的方法:

    1. 对象本身

    2. 当做方法参数而传递进来的对象

    3. 此方法创建或实例化的任何对象

    4. 对象的任何组件(被实例变量引用的任何对象)

    如果调用从另一个调用中返回的对象的方法,相当于与另一个调用产生的其他对象发生交互
    当前变量实例除了需要知道另一个调用所在的对象(A)还要知道该调用所产生的的对象(B),增加了直接认识对象的数目,这种情况下应该改为要求调用产生的对象(A)直接请求原本调用产生的对象(B),然后将运算结果返回。

    不应用最少知识原则的代码

        public float GetStart(){
            Engine engine = new Car().Engine;
            engine.Start();
        }
    

    应用该原则的代码

        public float GetStart(){
            new Car().Start(); //在Car的Start方法内委托给Engine实例去执行
        }
    
  • 相关阅读:
    最优比率环 SPFA+二分
    严格次小生成树
    SPFA判断负环BFS+DFS
    poj 1149 PIGS 网络流-最大流 建图理解
    9.20开始的停课日常
    Speed
    [BZOJ4827][Hnoi2017]礼物(FFT)
    中山纪念中学集训日志
    [POJ1151][HDU1542]Atlantis(线段树,扫描线)
    [BZOJ2002][洛谷P3203][Hnoi2010]Bounce 弹飞绵羊(LCT维护链长)
  • 原文地址:https://www.cnblogs.com/Saints/p/12624301.html
Copyright © 2011-2022 走看看