神奇的重构技术(《重构》读书笔记 一)

代码中经常会出现枚举性的变量,比如血型、性别之类。
以血型为例:

class Blood {
public final static 
int  o = 0 ;
public final static 
int  A = 1 ;
public final static 
int  B = 2 ;
public final static 
int  AB = 3 ;

private Blood();
}



class person
{
private 
int  _blood;
public 
void  setBlood( int  b) {
   _blood
= b;
}

如果要给一个person的实例设置血型,代码如此:person.setBlood(Blood.A);
这个写法的代码中,setBlood的参数为整型,如果如此调用person.setBlood(9);
编译器无法发现错误,只能靠人为控制,如果在方法setBlood中检测参数的有效性,又超越了该方法的职责。

重构后的代码如下:

final class Blood {
public final static Blood O
=new Blood(0);
public final static Blood A
=new Blood(1);
public final static Blood B
=new Blood(2);
public final static Blood AB
=new Blood(3);
private 
int _bloodCode;
private Blood(
int b){
    _bloodCode
=b;
  }

public 
int getCode(){
    
return _bloodCode;
  }

}


class person
{
private Blood _blood;
public setBlood(Blood b)
{
    _blood
=b;
  }

}

如此,(1)隐藏了血型的编码细节
            (2)方便编译期间发现错误
            (3)避免使用超越数据范围的参数

你可能感兴趣的:(神奇的重构技术(《重构》读书笔记 一))