软件设计重构秘笈21式-20合并继承
概念
本文中的”合并继承”是指如果子类的属性和方法也适合于基类,那么就可以移除子类,从而减少依赖关系。
意图
上一篇我们讲到“提取子类”重构是指当基类中的一个责任不被所有的子类所需要时,将这些责任提取到合适的子类中。 而我们今天所要讲的的“合并继承”重构一般用在当我们觉得不需要子类的时候。 如下代码所示,StudentWebSite子类除了有一个属性用来说明网站是否是活动的外没有别的责任,在这种情形下我们意识到isActive属性可以应用到所有的网站, 所以我们可以将isActive属性上移到基类中,并去掉StudentWebSite类。
案例
public class Website {
public String title;
public String description;
public List<WebPage> pages;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<WebPage> getPages() {
return pages;
}
public void setPages(List<WebPage> pages) {
this.pages = pages;
}
}
public class WebPage {
}
public class StudentWebsite extends Website {
public boolean isActive;
public boolean isActive() {
return isActive;
}
public void setActive(boolean active) {
isActive = active;
}
}
重构
重构后的代码如下:
public class Website {
public String title;
public String description;
public List<WebPage> pages;
public boolean isActive;
public boolean isActive() {
return isActive;
}
public void setActive(boolean active) {
isActive = active;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<WebPage> getPages() {
return pages;
}
public void setPages(List<WebPage> pages) {
this.pages = pages;
}
}
总结
这篇和上篇其实最主要论述了子类和父类的继承关系以及如何判断什么时候需要使用继承,一般我们都能处理好这些关系,所以相对比较简单。