重构第十一章
12.Replace Delegation with Inheritance(以继承取代委托)
你在两个classes之间使用委托关系(delegation),并经常为整个接口编写许多极简单的请托函数。让[请托class]继承[受托class]。
Example:
class Employee {
public String getName() {
return _person.getName();
}
public void setName(String arg) {
_person.setName(arg);
}
public String toString() {
return "Emp:" + _person.getLastName();
}
}
class Person {
String _name;
public String getName(){
return _name;
}
public void setName(String arg){
_name = arg;
}
public String getLastName() {
return _name.substring(_name.lastIndexOf(' ') +1);
}
}
End:
class Employee extends Person...
public String getName() {
return getName();
}
public void setName(String arg) {
setName(arg);
}
public String toString() {
return "Emp:" + getLastName();
}
Conclusion:
Replace Inheritance with Delegation(以委托取代继承)和Replace Delegation with Inheritance(以继承取代委托)方法恰恰相反。如果你发现自己需要使用[受托class]中的所有函数,可以使用本项重构方法。
但是如果两个class受托于同一个class时,不能使用这种重构方法,因为这样就没有办法共享数据。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
网友评论