模板模式:复用和扩展

模板方法模式提供了一种在不改变算法整体结构的情况下,通过抽象方法让子类定制部分流程的方式。例如在星巴克制作流程中,模板方法用于热水和装杯的复用,而冲泡和加料则由具体饮品子类实现。此外,通过钩子方法可以控制是否执行特定步骤,如是否加料,允许外部影响流程。
摘要由CSDN通过智能技术生成

模板模式:复用和扩展





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

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

复用和扩展

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值