设计模式--模板方法设计模式

1.定义:模板方法设计模式------在一个方法中定义一个 算法的骨架,而将一些步骤 延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。


2.引申知识点:骨架方法定义为 final,目的是防止子类去修改它。算法步骤可以动态改变,使用的是 钩子函数,子类决定是否执行。


3. head first 中的例子

1冲泡咖啡冲泡茶   抽象公共部分
2把水煮沸把水煮沸把水煮沸
3用沸水冲泡咖啡用沸水冲泡茶叶 用热水泡咖啡或茶
4把咖啡倒进杯子把茶倒进杯子把饮料倒进杯子
5加糖和牛奶加柠檬  在饮料中加入适当的调料

4.代码部分

public abstract class CoffeineBeverage {// 咖啡因饮料

	final void prepareRecipe() { // 准备 食谱

		boilWater(); // 把水煮沸
		brew(); // 用热水泡咖啡或茶
		pourInCup(); // 把饮料倒进杯子
		if (customerWantsCondiments()) {
			addCondiments();// 在饮料中加入适当的调料
		}
	}

	abstract void brew();

	abstract void addCondiments();

	private void boilWater() {
		System.out.println("把水煮沸");
	}

	private void pourInCup() {
		System.out.println("把饮料倒进杯子");
	}

	// 钩子函数,子类可以进行修改,用于骨架的构建
	public boolean customerWantsCondiments() {
		return true;
	}
}

public class CoffieWithHook extends CoffeineBeverage {

	@Override
	void brew() {
		System.out.println("用热水泡咖啡");
	}

	@Override
	void addCondiments() {
		System.out.println("在咖啡中加入适当的牛奶和糖");
	}

}

public class TeaWithHook extends CoffeineBeverage {

	@Override
	void brew() {
		System.out.println("用热水泡茶");
	}

	@Override
	void addCondiments() {
		System.out.println("在茶中加入适当的柠檬");
	}

	public boolean customerWantsCondiments() {
		return false;
	}
}

public class Client {
	public static void main(String[] args) {
		CoffieWithHook ch = new CoffieWithHook();
		ch.prepareRecipe();

		System.out.println("------------------");
		
		TeaWithHook th = new TeaWithHook();
		th.prepareRecipe();
	}
}
运行结果:

把水煮沸
用热水泡咖啡
把饮料倒进杯子
在咖啡中加入适当的牛奶和糖
------------------
把水煮沸
用热水泡茶
把饮料倒进杯子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值