模板模式:复用和扩展





模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

这里的算法是指“业务逻辑”,这个“算法”骨架或者流程就是模板。

复用和扩展

比如在一个星巴克流程中,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 《设计模式》

经验分享 程序员 微信小程序 职场和发展