美文网首页
重构读书笔记-8_1-Self_Encapsulate_Fiel

重构读书笔记-8_1-Self_Encapsulate_Fiel

作者: MR_Model | 来源:发表于2019-06-22 17:00 被阅读0次

    重构第八章

    1.Self Encapsulate Field(自封装值域)

    你直接访问一个值域(field),但与值域之间的耦合关系逐渐变得笨拙。为这个值域建立取值/设置函数(getting/setting methods),并且只以函数来访问值域

    Example:

    private int _low, _high;
    boolean includes(int arg) {
        return arg>=_low &&arg <= _high; 
    }
    

    Analyse:
    直接访问变量:代码容易阅读;
    间接访问变量:subclass可以通过覆写一个函数而改变获取数据的途径;或者lazy initlalization(直到使用某值,才初始化)。

    可以首先使用直接访问变量,然后等遇到麻烦后使用间接访问变量。

    End:

    private int _low, _high;
    int getLow() {return _low;}
    int getHigh() {return _high;}
    
    boolean includes(int arg) {
        return arg>=_low &&arg <= _high; 
    }
    

    Conclusion:

    使用本项重构时,你必须小心对待[在构造函数中使用设置函数]的情况。一般说来,设置函数应该在[对象创建后]才使用。所以一般在构造函数中直接访问变量,或者建立另一个独立的初始化函数。

    展示

    CappedRange extends IntRange {
        cappedRange(int low, int high , int cap){
            super(low,high);
            m_cap = cap;
        }
        private: 
        int m_cap;
        int getCap() {
            return m_cap;
        }
        int getHigh() {
            return Math.min(super.getHigh(),getCap());
        } 
    }
    

    CappedRange继承于IntRange,覆写getHigh()函数后,加入了对cap的考虑,而不用修改IntRange class的任何行为。

    注意

    重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!

    相关文章

      网友评论

          本文标题:重构读书笔记-8_1-Self_Encapsulate_Fiel

          本文链接:https://www.haomeiwen.com/subject/rojvqctx.html