模板模式:复用和扩展
模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。
这里的算法是指“业务逻辑”,这个“算法”骨架或者流程就是模板。
复用和扩展
比如在一个星巴克流程中,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 《设计模式》
下一篇:
超详细JDK下载与安装步骤