设计模式-模板方法模式

模板方法:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使的子类可以不可以一个算法的结构即可重定该算法的某些特定步骤。

简单点说:有一组流程要执行,流程中只有一个步骤是未知的,它前后的其余步骤都是固定的,我们就将这一步骤延迟到具体的子类去实现,以达到通用代码的抽象封装。

假设有一个考试的父类:

/**
 * 考试
 * @author PC
 *
 */
public abstract class Exam {

	/**
	 * 考试
	 */
	public final void exam(){
		enter();
		startExam();
		exit();	}

	/**
	 * 进入考场
	 */
	protected void enter() {
		System.out.println("进入考场..");
	}
	
	/**
	 * 具体进行考试
	 */
	protected abstract void startExam() ;
	
	/**
	 * 离开考场
	 */
	protected void exit(){
		System.out.println("离开考场...");
	}
}

进入考场和离开考场是所有考试行为的通用逻辑,而具体是考什么试,如何考得根据具体子类去决定,

假如是学生的话:

/**
 * 学生考试
 * @author PC
 *
 */
public class Student extends Exam{

	@Override
	protected void startExam() {
		System.out.println("学生考试做卷子..");
	}
	
}

假如是考驾照的话 :

/**
 * 考驾照
 * @author PC
 *
 */
public class License extends Exam{

	@Override
	protected void startExam() {
		System.out.println("开始开车过关..");
	}

}


调用端:

public class Client {

	public static void main(String[] args) {
		new Student().exam();
		new License().exam();
	}
	
}
结果:

进入考场..
学生考试做卷子..
离开考场...
进入考场..
开始开车过关..
离开考场...


有人可能会疑惑:那这个模板方法和上次的工厂方法或者抽象工厂有什么区别。。?感觉都是定义了个抽象方法,让子类去实现。

区别:

模板方法侧重的是在一个固定的执行流程中,其中的一步让子类去实现,侧重执行流程,比如Activity的onCreate,onStart等方法。

工厂方法和抽象工厂都是侧重创建对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值