模板模式,定义一个模型,模型中的具体细节我们自己去设计。这和我们之后会提到的建造者模式有点相似。
1.1 先来个模板
package template;
/************************************************
*@ClassName : CarTemplate
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/3 20:38】
*@Version : 1.0.0
*************************************************/
public abstract class CarTemplate {
protected abstract void door();
protected abstract void wheel();
protected abstract void light();
protected abstract void aiCtrl();
public final void run() {
door();
wheel();
light();
if(isAiCtrl()) {
aiCtrl();
}
}
protected boolean isAiCtrl(){
System.out.println("父类中设置开启AI");
return true;
}
}
1.2 根据模型设计个车
package template;
/************************************************
*@ClassName : BWMCar
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/3 20:45】
*@Version : 1.0.0
*************************************************/
public class BWMCar extends CarTemplate {
private boolean aiCtrl = false;
@Override
protected void door() {
System.out.println("给车加个门");
}
@Override
protected void wheel() {
System.out.println("给车加个轮");
}
@Override
protected void light() {
System.out.println("给车加个灯");
}
@Override
protected void aiCtrl() {
System.out.println("给车加个AI");
}
public boolean isAiCtrl() {
System.out.println("开启AI"+this.aiCtrl);
return this.aiCtrl;
}
public void setAiCtrl(boolean aiCtrl) {
this.aiCtrl = aiCtrl;
}
}
1.3 测试
package template;
/************************************************
*@ClassName : Test
*@Description : TODO
*@Author : NikolaZhang
*@Date : 【2018/12/3 21:04】
*@Version : 1.0.0
*************************************************/
public class Test {
public static void main(String[] args) {
BWMCar bwmCar = new BWMCar();
bwmCar.setAiCtrl(true);
bwmCar.run();
}
}
1.4 结果
参考
【菜鸟教程】:http://www.runoob.com/design-pattern/template-pattern.html