重构读书笔记-8_1-Self_Encapsulate_Fiel

2019-06-22  本文已影响0人  MR_Model

重构第八章

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的任何行为。

注意

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

猜你喜欢

热点阅读