模板方法模式

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

OO原则:别找我,我会找你。

代码:

算法骨架类

/**
 * 做饭步骤
 * @author z_hh
 * @time 2018年7月22日
 */
public abstract class CookingStep {

	// 定义步骤,用final修饰,杜绝子类覆盖
	protected final void cooking() {
		wash();// 洗菜
		cut();// 切菜
		fire();// 开关
		spice();// 调料
	}
	
	// 洗菜,不提供实现,强制子类实现
	protected abstract void wash();
	
	// 切菜,不提供实现,强制子类实现
	protected abstract void cut();
	
	// 开火只有一种没啥特别的,用final修饰,杜绝子类覆盖
	private final void fire() {
		System.out.println("开火!");
	}
	
	// 钩子方法,提供默认,子类自己选择是否需要覆盖
	protected void spice() {
		System.out.println("默认只放盐和油!");
	}
	
}

两个子类

public class ZhouCooking extends CookingStep {

	@Override
	protected void wash() {
		System.out.println("使用挖掘机洗菜!");

	}

	@Override
	protected void cut() {
		System.out.println("周师傅用神乎其神的刀法切菜!");

	}
	
	@Override
	protected void spice() {
		System.out.println("我放了盐和油,还有最爱的老干妈!");
	}

}
public class WuCooking extends CookingStep {

	@Override
	protected void wash() {
		System.out.println("落后的洗菜手法!");

	}

	@Override
	protected void cut() {
		System.out.println("切菜用了半个小时!");

	}

}

测试:

public class Test {

	public static void main(String[] args) {
		// 吴师傅下厨
		System.out.println("吴师傅做菜...");
		CookingStep wu = new WuCooking();
		wu.cooking();
		System.out.println("--------------完美分割线--------------");
		// 周师傅下厨
		System.out.println("周师傅下厨...");
		CookingStep zhou = new ZhouCooking();
		zhou.cooking();
	}

}

结果:

吴师傅做菜...
落后的洗菜手法!
切菜用了半个小时!
开火!
默认只放盐和油!
--------------完美分割线--------------
周师傅下厨...
使用挖掘机洗菜!
周师傅用神乎其神的刀法切菜!
开火!
我放了盐和油,还有最爱的老干妈!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值