Self Encapsulate Field(自封装字段)

  1. private int _low, _heigh;
  2. boolean includes(int arg){
  3. return arg >= _low && arg <= _high;
  4. }

修改为:

  1. private int _low, _heigh;
  2. boolean includes(int arg){
  3. return arg >= getLow() && arg <= getHeigh();
  4. }
  5. int getLow(){return _low}
  6. int getHeigh(){return _heigh}

做法

  • 为待封装字段建立取值/设值函数

  • 找出该字段的所有引用点,将它们全部改为调用取值/设值函数

    如果引用点要读取字段值,就将它替换为调用取值函数;如果引用点要给字段赋值,就将它替换为调用设值函数

你可以暂时将该字段改名,让编译器帮助你查找引用点

  • 将该字段声明为private

  • 复查,确保找出所有引用点

  • 编译,测试

范例

  1. class IntRange{
  2. private int _low, _high;
  3. boolean includes(int arg){
  4. return arg >= _low && arg <= _high;
  5. }
  6. void grow(int factor){
  7. _high = _high * factor;
  8. }
  9. IntRange(int low, int high){
  10. _low = low;
  11. _high = high;
  12. }
  13. }

修改后:

  1. class IntRange{
  2. boolean includes(int arg){
  3. return arg >= _low && arg <= _high;
  4. }
  5. void grow(int factor){
  6. _high = _high * factor;
  7. }
  8. private int _low, _high;
  9. int getLow(){
  10. return _low;
  11. }
  12. int getHigh(){
  13. return _high;
  14. }
  15. void setLow(int arg){
  16. _low = arg;
  17. }
  18. void setHigh(int arg){
  19. _high = arg;
  20. }
  21. IntRange(int low, int high){
  22. initialize(low,high)
  23. }
  24. private void initialize(int low, int high){
  25. _low = low;
  26. _high = high;
  27. }
  28. }