作法(Mechanics)
 
  
    - 如果field的属性是public,首先使用Encapsulate Field(206)将它封装起来。
 
    
      
        - ==》如果你有可能移动那些频繁访问该field的函数,或如果有许多函数访问某个field,先使用Self Encapsulate Field(171)也许会有帮助。
 
       
     
    - 编译,测试。
 
    - 在target class中建立与source field相同的field,并同时建立相应的设值/取值(setting/getting)函数。
 
    - 编译target class。
 
    - 决定如何在source object中引用target object。
 
    
      
        - ==》一个现成的field或method可以助你得到target
object。如果没有,就看能否轻易建立这样一个函数。如果还不行,就得在source class中新建一个field来存放target
object。这可能是个永久性修改,但你也可以暂不公开它,因为后续重构可能会把这个新建field除掉。
 
       
     
    - 删除source field。
 
    - 将所有[对source field的引用]替换为[对target适当函数的调用]。
 
    
      
        - ==》如果是[读取]该变量,就把[对source field的引用]替换为[对target取值函数(getter)的调用];如果是[赋值]该变量,就把[对source field的引用]替换成[对设值函数(setter)的调用]。
 
        - ==》如果source field不是private,就必须在source class的所有subclasses中查找source field的引用点,并进行相应替换。
 
       
     
    - 编译,测试。
 
     
   
 
	 
	
	
 
 
	    
    
 
				
 |