设计模式--模板模式

1.什么是模板模式?

      模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

2.模板模式的构成

    1)角色1

     抽象模板要定义三种方法.

     1.抽象方法 子类必须去实现。

       2.扩展方法,是一个空方法 子类可以复写 也可以不复写。

       3.私有的最终方法,不可以被复写。

       4.最后,模板方法,这个方法定义了每一个方法的执行顺序和逻辑。

     2)角色2

      具体模板要

             1.继承抽象模板

             2.实现抽象方法

             3.根据需要重写扩展方法

3.应用:

      比如我们要计算一个函数的运行时间,我们就可以把这个函数延伸到子类中去实现,而在父类中去计算运行的时间,这样我们就可以根据需要计算任意函数的运行时间 只需要不容的子类去继承。

/*
 *  抽象模板
 */
abstract class CalTimeAbsTemplate{
	
	/*
	 * 必须要实现的一个业务方法
	 */
	public abstract void doJob();
	
	/*
	 * 定义一个可以重写也可以不重写的方法	
	 */
	public void hookMethod() {
		System.out.println("程序开始运行");
	}
	
	/**
	 * 必须不能被重写的而方法
	 */
	public final long concreateMethod() {
		long currentTime = System.currentTimeMillis();
		return currentTime;
	}
	
	/**
	 * 模板方法 供其他类来使用
	 */
	public long templateMethod() {
		//获得doJob执行前的时间
		long startTime = concreateMethod();
		doJob();
		long endTime = concreateMethod();
		return endTime-startTime;
	}
}

/*
 * 具体的模板
 */
class ContrateTemplate extends CalTimeAbsTemplate{
	public void doJob() {
		/*
		 * 实现具体的业务逻辑
		 */
		for(int i=0;i<10;i++) {
			System.out.println("程序正在运行"+i+"%");
		}
	}
	//hookMethod() 根据要求选择是否重写
	
	public void hookMethod() {
		System.out.println("方法被重写");
	}
	
}


public class Demo2 {
	public static void main(String[] args) {
		ContrateTemplate ct = new ContrateTemplate();
		long doTime = ct.templateMethod();
		System.out.println("程序的运行时间:"+doTime);
	}
}


借鉴腾讯课堂相关视频。

你可能感兴趣的:(java入门)