模板方法定义
定义一个模板,在父类中抽象部分方法,实现部分方法。将部分方法放在子类来实现,使得子类不改变结构即可重新定义某些特定步骤。
方法角色
(1)基本方法
基本方法,由子类自己去实现
(2)模板方法
具体方法,实现对基本方法的调度,完成固定逻辑。模板方法的使用场景
我们在日常开发中可能会遇到类似情况,某个方法实现需要一系列步骤。
例如:我们要造一把机械键盘,需要制作的东西有键帽,键轴,背光类型。
(1)抽象基类(键帽,键轴,背光类型等制作由子类去控制)
(2)制作键盘的过程固定下来由抽象基类去实现
UML类图
package Template;
/**
* Created by jianw.li on 2017/12/11.
*/
public abstract class AbstractKeyboard {
/**
* 制作键帽
*/
protected abstract void makeKeyCap();
/**
* 制作键轴
*/
protected abstract void makeKeySwitches();
/**
* 制作键盘灯
*/
protected abstract void makeLighting();
/**
* 不允许改变父类方法
*/
final public void makeKeyboard() {
/**
* 调用制造键盘基本方法
*/
this.makeKeyCap();
this.makeKeySwitches();
this.makeLighting();
}
}
public class KeyboardI extends AbstractKeyboard {
protected void makeKeyCap() {
}
protected void makeKeySwitches() {
}
protected void makeLighting() {
}
}
public class KeyboardII extends AbstractKeyboard {
protected void makeKeyCap() {
}
protected void makeKeySwitches() {
}
protected void makeLighting() {
}
}
public class KeyboardIII extends AbstractKeyboard{
protected void makeKeyCap() {
}
protected void makeKeySwitches() {
}
protected void makeLighting() {
}
}
优点
封装部分不可变,扩招可变
提取公共方法,利于维护
行为父类控制,子类实现