Self Encapsulate Field(自封装字段)
private int _low, _heigh;boolean includes(int arg){return arg >= _low && arg <= _high;}
修改为:
private int _low, _heigh;boolean includes(int arg){return arg >= getLow() && arg <= getHeigh();}int getLow(){return _low}int getHeigh(){return _heigh}
做法
为待封装字段建立取值/设值函数
找出该字段的所有引用点,将它们全部改为调用取值/设值函数
如果引用点要读取字段值,就将它替换为调用取值函数;如果引用点要给字段赋值,就将它替换为调用设值函数
你可以暂时将该字段改名,让编译器帮助你查找引用点
将该字段声明为private
复查,确保找出所有引用点
编译,测试
范例
class IntRange{private int _low, _high;boolean includes(int arg){return arg >= _low && arg <= _high;}void grow(int factor){_high = _high * factor;}IntRange(int low, int high){_low = low;_high = high;}}
修改后:
class IntRange{boolean includes(int arg){return arg >= _low && arg <= _high;}void grow(int factor){_high = _high * factor;}private int _low, _high;int getLow(){return _low;}int getHigh(){return _high;}void setLow(int arg){_low = arg;}void setHigh(int arg){_high = arg;}IntRange(int low, int high){initialize(low,high)}private void initialize(int low, int high){_low = low;_high = high;}}
