设计23式—模板方法

最近在看设计模式之禅,书的内容以讲故事的方式介绍了设计模式,强力推荐。

以下是个人对于模板方法模式的理解

/*
 * 模板方法模式
 * 优点
 * 封装不变部分,扩展可变部分
 * 提取公共部分代码,便于维护
 * 行为由父类控制,子类实现
 * 
 */
public class MyMain {
	public static void main(String[] args) {
		new carA().test();
		new carB().test();
	}
}
//核心
//定义一个抽象的车模型类(抽象模板)
abstract class carModel{
	//车的基本抽象方法:启动
	protected abstract void start();
	//车的基本抽象方法:暂停
	protected abstract void stop();
	//车的基本抽象方法:奔跑
	protected abstract void run();
	//车的模板方法:测试 ,用于测试车模型的基本方法(既子类提取的公共方法:测试)
	protected void test() {
		System.out.println("开始测试车模型:");
		this.start();
		if (isRun()) {
			this.run();
		}
		this.stop();
		System.out.println("测试结算。");
	};
	//钩子方法 默认测试时车是要奔跑起来的(子类重写该方法,可用于控制测试时是否要奔跑)
	protected boolean isRun() {
		return true;
	}
	
}
//继承车模型的A类车模型(具体模板)
class carA extends carModel{
	//实现车模型的基本方法
	@Override
	protected void start() {
		System.out.println("A类车启动");
	}
	@Override
	protected void stop() {
		System.out.println("A类车暂停");
	}
	@Override
	protected void run() {
		System.out.println("A类车奔跑");
	}
	//重写钩子方法,使A类车测试时不用奔跑起来
	@Override
	protected boolean isRun() {
		return false;
	}
}
//继承车模型的B类车模型(具体模板)
class carB extends carModel{
	@Override
	protected void start() {
		System.out.println("B类车启动");
	}
	@Override
	protected void stop() {
		System.out.println("B类车暂停");
	}
	@Override
	protected void run() {
		System.out.println("B类车奔跑");
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值