重构对象-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不复存在。

相关内容

热门资讯

总算了解开挂!众乐乐开挂AI攻... 总算了解开挂!众乐乐开挂AI攻略,众乐乐多功能都是存在有开挂攻略1、上手简单,内置详细流程视频教学,...
程序员教你辅助!英豪娱乐城辅助... 程序员教你辅助!英豪娱乐城辅助AI工具,英豪娱乐城多功能原来真的是有辅助工具暗藏猫腻,小编详细说明英...
盘点几款辅助!冰球突破辅助AI... 盘点几款辅助!冰球突破辅助AI插件,冰球突破多功能其实真的有辅助插件1、冰球突破脚本辅助下载、冰球突...
分享一款辅助器!建湖好运麻将辅... 分享一款辅助器!建湖好运麻将辅助器AI教程,建湖好运麻将多功能竟然真的是有辅助器教程1、在建湖好运麻...
每日必备透视挂!新老夫子透视挂... 每日必备透视挂!新老夫子透视挂AI技巧,新老夫子多功能原来真的有透视挂技巧1、新老夫子脚本辅助下载、...
分享认知作弊器!星际互联作弊器... 分享认知作弊器!星际互联作弊器AI方法,星际互联多功能都是存在有作弊器方法1、每一步都需要思考,不同...
玩家必备攻略作弊器!闲逸斗地主... 玩家必备攻略作弊器!闲逸斗地主作弊器AI方法,闲逸斗地主多功能果然是有作弊器方法1、闲逸斗地主透视辅...
分辨真假透视挂!宁波游戏大厅透... 分辨真假透视挂!宁波游戏大厅透视挂AI软件,宁波游戏大厅多功能一直是有透视挂软件1、让任何用户在无需...
每日必看教程透视挂!君悦来透视... 每日必看教程透视挂!君悦来透视挂AI工具,君悦来多功能本来是有透视挂工具1、上手简单,内置详细流程视...
发现一款外挂!半岛外挂AI工具... 发现一款外挂!半岛外挂AI工具,半岛多功能一贯真的有外挂工具1、起透看视 半岛辅助软件价格2、随意选...