Inline Class (154)将类内联化正好与Extract Class (149)提炼类相反。如果一个类不再承担足够责任、不再有单独存在的理由(这通常是因为此前的重构动作移走了这个类的责任),我就会挑选这一“萎缩类”的最频繁用户(也是个类),以Inline Class (154)手法将“萎缩类”塞进另一个类中。
下面程序有两个类,Person类负责创建人对象。TelephoneNumber类负责管理电话号码。现在将TelephoneNumber类放到Person类中。
class Person...public String getName() {return _name;}public String getTelephoneNumber(){return _officeTelephone.getTelephoneNumber();}TelephoneNumber getOfficeTelephone() {return _officeTelephone;}private String _name;private TelephoneNumber _officeTelephone = new TelephoneNumber();class TelephoneNumber...public String getTelephoneNumber() {return ("(" + _areaCode + ") " + _number);}String getAreaCode() {return _areaCode;}void setAreaCode(String arg) {_areaCode = arg;}String getNumber() {return _number;}void setNumber(String arg) {_number = arg;}private String _number;private String _areaCode;
首先我在Person中声明TelephoneNumber的所有可见public函数
class Person...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对象中的方法。同时删除上面的方法
Person martin = new Person();martin.setAreaCode ("781");
现在,我可以持续使用Move Method 和 Move Field ,直到TelephoneNumber不复存在。
上一篇:求间断点流水线