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;
}
}