在对象之间搬移特性之四 :Inline Class(将类内联化)
来源:互联网 发布:cda数据分析师有什么用 编辑:程序博客网 时间:2024/05/29 13:11
你的某个class没有做太多事情(没有承担足够责任)。
将class的所有特性搬移到另一个class中,然后移除原class。
动机(Motivation)
Inline Class正好与Extract Class 相反。如果一个class不再承担足够 责任、不再有单独存在的理由〔这通常是因为此前的重构动作移走了这个class的 责任),我就会挑选这一「萎缩class」的最频繁用户(也是个class),以Inline Class手法将「妻缩class」塞进去。
作法(Mechanics)
范例(Examples)
先前(上个重构项〉我从TelephoneNumber「提炼出另一个class,现在我要将它inlining塞回到Person去。一开始这两个classes是分离的:
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 martin = new Person();
martin.setAreaCode ("781");
现在,我可以持续使用Move Method 和Move Field ,直到TelephoneNumber不复存在。
- 在对象之间搬移特性之四 :Inline Class(将类内联化)
- 在对象之间搬移特性之三 :Extract Class(提炼类)
- 在对象之间搬移特性---搬移函数
- 在对象之间搬移特性(一)
- 在对象之间搬移特性(二)
- 在对象之间搬移特性之二 :Move Field(搬移值域)
- 在对象之间搬移特性
- 重构之在对象之间搬移特性
- 重构之在对象之间搬移特性
- 重构-改善既有代码的设计(四)----------在对象之间搬移特性
- Inline Class(将类内联化)
- 7.4 inline class (将类内联化)
- 第七章 在对象之间搬移特性
- 3、在对象之间搬移特性
- 第七章 在对象之间搬移特性
- 7. 在对象之间搬移特性
- 在对象之间搬移特性之五 :Hide Delegate(隐藏「委托关系」)
- 在对象之间搬移特性之六 :Remove Middle Man(移除中间人)
- iOS网络编程-解决iCloud文档存储过程中文档冲突问题
- 界面开发概述
- (转)理解collate Chinese_PRC_CI_AS
- Java编码转换工具类
- 关键词备忘录(不断更新中...)
- 在对象之间搬移特性之四 :Inline Class(将类内联化)
- Having fun web crawling with phantomJs
- UITableview 上提刷新
- 电影之记忆2:(杀手代号47)
- Sagan is log analysis engine
- [排序算法]关于Top-k排序(优先队列Priority Queue)
- gdb图形化调试之insight
- struts.xml 也有解析顺序吗?
- 理解Linux系统负荷