Java 抽象类最佳实践-模板设计模式

目录

1.基本介绍

2.模板设计模式能解决的问题

3.最佳实践


1.基本介绍

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。

2.模板设计模式能解决的问题

  1. 当功能内部一部分实现是确定,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
  2. 编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,就是一种模板模式.

3.最佳实践

需求:

  • 有多个类,完成不同的任务job
  • 要求统计得到各自完成任务的时间
  • 请编程实现TestTemplate.java

1.先用最容易想到的方法—》代码实现

2.分析问题,提出使用模板设计模式

【个人理解:

原始方法:如果需要计算一个job的运行时间,需要在每个job方法体前后分别获取当前时间,最后做差

改进:把获取当前时间的代码写成一个方法,把job嵌入在其中间。优点:如果job需要替换,只需要在获取时间的代码块中把job方法替换即可。缺点:每个类都需要重新写一个获取时间的方法,代码的复用性差。

使用抽象类再次改进:定义一个抽象类,把各个类中共有的方法抽取出来,即把计算时间的方法放在抽象类中,作为普通的公共类给子类使用;而把不确定有什么功能的job()方法写成抽象方法嵌入其中。这样其他类想计算某个方法的使用时间时,只需要继承该抽象类,重写其job()方法即可。】

代码:

abstract public class Template { //抽象类-模板设计模式
	public abstract void job();//抽象方法

	public void calculateTime() {//实现方法,调用 job 方法
		//得到开始的时间
		long start = System.currentTimeMillis();
		job(); //动态绑定机制
		//得的结束的时间
		long end = System.currentTimeMillis();
		System.out.println("任务执行时间 " + (end - start));
	}
}
public class AA extends Template {
	//计算任务
	//1+....+ 800000
	@Override
	public void job() { //实现 Template 的抽象方法 job
		long num = 0;
		for (long i = 1; i <= 800000; i++) {
			num += i;
		}
	}
	// public void job2() {
	// //得到开始的时间
	// long start = System.currentTimeMillis();
	// long num = 0;
	// for (long i = 1; i <= 200000; i++) {
	// num += i;
	// }
	// //得的结束的时间
	// long end = System.currentTimeMillis();
	// System.out.println("AA 执行时间 " + (end - start));
	// }
}

你可能感兴趣的:(#,面向对象高级,java,设计模式,开发语言,学习方法,windows)