Summary:
某个类没有做太多事情。将这个类的所有特性搬移到另一个类,然后移除原类。
Motivation:
Inline Class 正好与Extract Class相反。如果一个类不再承担足够责任、不再有单独存在的理由(这通常是因为此前的重构动作移走了这个类的责任),我们就应该挑选这一“萎缩类”的最频繁用户(也是个类),以Inline Class手法将“萎缩类”塞进另一个类中。
Mechanics:
1.在目标类身上声明源类的public协议,将所有函数委托至源类。
如果“以一个独立接口表示源类函数”更合适的话,就应该在内联之前先使用Extract Interface。
2.修改所有源类引用点,改而引用目标类。
将源类声明为private,以斩断包之外的所有引用可能。同时修改源类的名称,这便可使编译器帮助你捕捉到所有对于源类的隐藏引用点。
3.编译,测试。
4.运用Move Method 和Move Field将源类的特性全部搬移到目标类
5.为源类举行一个简单的“丧礼”。
范例
上个重构(Extract Class )我们从TelephoneNumber提炼出另一个类,现在我们将它塞回到Person去。一开始这两个类是分离的(Extract Class中的范例)。
首先我们在Person中声明TelephoneNumber的所有public 函数:
String getAreaCode()
{
return officeTelephone.getAreaCode();
}
void setAreaCode( String arg )
{
officeTelephone.setAreaCode( arg );
}
String getNumber()
{
return officeTelephone.getNumber();
}
void setNumber( String arg )
{
officeTelephone.setNumber( arg );
}
现在,找出TelephoneNumber的所有用户,让它们转而是用Person的接口。于是代码如下:
Person martin = new Person();
martin.getOfficeTelephone().setAreaCode( "781" );
就变成了
Person martin = new Person();
martin.setAreaCode( "781" );
现在,我们可以反复是用Move Method和Move Field,直到TelephoneNumber不复存在。