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

转载:https://blog.csdn.net/m0_47944994/article/details/127997253

在这里插入图片描述
在这里插入图片描述

//抽象类(包含模板方法和若干个基本方法)
public abstract class AbstractClass {
	//模板方法按照一定顺序执行
	public final void cookProcess() {
		//第一步:倒油
		this.pourOil();
		//第二步:热油
		this.heatOil();
		//第三步:倒蔬菜
		this.pourVegetable();
		//第四步:倒调味料
		this.pourSauce();
		//第五步:翻炒
		this.fry();
	}
	//倒油步骤都一样,所以具体实现(具体方法)
	public void pourOil() {
		System.out.println("倒油");
	}
	//第二步:热油是一样的,所以直接实现(具体方法)
	public void heatOil() {
		System.out.println("热油");
	}
	//第三步:倒蔬菜是不一样的(一个下包菜,一个是下菜心)钩子方法
	public abstract void pourVegetable();
	//第四步:倒调味料是不一样
	public abstract void pourSauce();(钩子方法)
	//第五步:翻炒是一样的,所以直接实现(具体方法)
	public void fry(){
		System.out.println("炒啊炒啊炒到熟啊");
	}
}
//具体子类
public class ConcreteClass_BaoCai extends AbstractClass {

	@Override
	public void pourVegetable() {
		System.out.println("下锅的蔬菜是包菜");
	}
	@Override
	public void pourSauce() {
		System.out.println("下锅的酱料是辣椒");
	}
}
//具体子类
public class ConcreteClass_CaiXin extends AbstractClass {

	@Override
	public void pourVegetable() {
		System.out.println("下锅的蔬菜是菜心");
	}
	@Override
	public void pourSauce() {
		System.out.println("下锅的酱料是蒜蓉");
	}
}
//测试类
public class Client {
	public static void main(String[] args) {
		//炒手撕包菜
		ConcreteClass_BaoCai baoCai = new ConcreteClass_BaoCai();
		baoCai.cookProcess();//调用抽象类的模板方法
		//炒蒜蓉菜心
		ConcreteClass_CaiXin caiXin = new ConcreteClass_CaiXin();
		caiXin.cookProcess();//调用抽象类的模板方法
	}
}

运行结果:

倒油
热油
下锅的蔬菜是包菜
下锅的酱料是辣椒
炒啊炒啊炒到熟啊
倒油
热油
下锅的蔬菜是菜心
下锅的酱料是蒜蓉
炒啊炒啊炒到熟啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值