神奇的重构技术

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

 
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)避免使用超越数据范围的参数

你可能感兴趣的:(重构)