重构对象-Inline Class将类内联化四
创始人
2025-05-30 01:45:32
0

重构对象-Inline Class将类内联化四

1.将类内联化

1.1.使用场景

Inline Class (154)将类内联化正好与Extract Class (149)提炼类相反。如果一个类不再承担足够责任、不再有单独存在的理由(这通常是因为此前的重构动作移走了这个类的责任),我就会挑选这一“萎缩类”的最频繁用户(也是个类),以Inline Class (154)手法将“萎缩类”塞进另一个类中。

1.2.如何做

  • 在目标类身上声明源类的public协议,并将其中所有函数委托至源类。
  • 如果“以一个独立接口表示源类函数”更合适的话,就应该在内联之前先使用Extract Interface (341)。
  • 修改所有源类引用点,改而引用目标类。
  • 将源类声明为private,以斩断包之外的所有引用可能。同时修改源类的名称,这便可使编译器帮助你捕捉到所有对于源类的隐藏引用点。
  • 编译,测试。
  • 运用Move Method (142)和Move Field (146),将源类的特性全部搬移到目标类。
  • 删除原类
  • 编译,测试

1.3.示例

下面程序有两个类,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不复存在。

相关内容

热门资讯

伊朗否认邀请国际原子能机构对其... 6月19日消息,伊朗外交部发言人巴加埃19日在社交媒体发文,否认部分媒体关于“伊朗邀请国际原子能机构...
伊朗外交部否认霍尔木兹海峡关闭 6月19日消息,伊朗外交部发言人巴加埃19日在社交媒体发文否认部分媒体有关“霍尔木兹海峡关闭”的说法...
特朗普称要耗完美伊谈判60天期... 6月19日消息,美国总统特朗普今天(19日)在社交媒体平台接连发帖称,““战争削弱了伊朗!它不再拥有...
美以伊最新局势:美称美伊将暂停... 当地时间6月28日,一位美国高级官员透露,美伊双方已同意停止相互攻击,并计划于6月30日在卡塔尔首都...
3900亿美团,深陷低估值的“... AI赛道的估值泡沫,正在严重挤压中概互联的估值空间。自去年10月初至今,阿里巴巴港股累计跌幅超50%...
欧洲人抢疯了,政治正确的中国空... 2024年,巴黎奥运会。中国队带去了几百台空调,被政治正确的网友嘲讽,说欧洲气候宜人,不需要空调,带...
三星与SK今日将宣布2000万... 韩国总统李在明将于今日(6月29日)在青瓦台主持召开会议。届时,三星电子会长李在镕和SK集团会长崔泰...
伊朗外长说以色列唯一兴趣是战争 6月19日消息,伊朗外长阿拉格齐今天(19日)在社交媒体平台转发以色列国家安全部长、极右翼政治人士本...
AWS在中国,等来了AI出海 ... 出品 | 虎嗅科技组作者 | 梁卡尔编辑 | 苗正卿头图 | 虎嗅拍摄亚马逊云科技(以下简称“AWS...
三峡枢纽新通道先行开挖区预计今... 6月19日消息,三峡枢纽新通道先行开挖区项目部已全面完成表土剥离,预计今年10月份完成开挖任务。三峡...