模板模式:复用和扩展
模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。
这里的算法是指“业务逻辑”,这个“算法”骨架或者流程就是模板。
复用和扩展
比如在一个星巴克流程中,1)热水 2)冲泡(咖啡or茶) 3) 装入杯中 4)加入小料
这是一个固定的流程,全国都是按照这个流程去制作。
public abstract class XBK{
public final void start(){
paoshui();
chongpao();
zhuangbei();
jialiao();
}
private void paoshui(){
//热水
}
private abstract void chongpao(){
//冲泡 需要自己重写需要冲泡什么
throw new Exception();
}
private void zhuangbei(){
//装杯
}
private abstract void jialiao(){
//加料自己定义
throw new Exception();
}
}
通过这个模板来实现 热水和装杯的代码复用,冲泡和加料的自己实现扩展。
所有的都是按照一个模板来进行操作的。
使用钩子,进行控制操作
还是以星巴克为例
public abstract class XBK{
public final void start(){
paoshui();
chongpao();
zhuangbei();
if(shifoujiaxiaoliao()){
jialiao();
}
}
private void paoshui(){
//热水
}
public abstract void chongpao(){
//冲泡 需要自己重写需要冲泡什么
throw new Exception();
}
private void zhuangbei(){
//装杯
}
//是否加料
public boolean shifoujiaxiaoliao(){
return true;
}
public abstract void jialiao(){
//加料自己定义
throw new Exception();
}
}
让调用者挂钩重写加料方法使得,来控制是否加料。
如有错误欢迎指正
引用文献为《Head Fist设计模式》第八章封装算法模板方法模式、
GoF 《设计模式》