黑马程序员技术交流社区
标题:
关于模板方法设计模式的疑问
[打印本页]
作者:
张权
时间:
2013-3-18 13:57
标题:
关于模板方法设计模式的疑问
本帖最后由 张权 于 2013-3-18 14:45 编辑
代码时老毕的源代码, 不过有一点没听懂,求解释, 最好附上代码说明下!
问题: GetTime类定义了一个抽象方法 public abstract void runCoded(); 老毕说这个方法不一定是抽象的, 他的原话解释是这样的, 假设这个模板有默认的实现, 当觉得这个功能不爽时, 就可以修改, 完全没有明白这句话是什么意思....
abstract class GetTime {
//该功能是确定的,不让被复写,所以用final修饰
public final void getTime() {
long startTime = System.currentTimeMillis();
//该功能是不确定的,确定功能里面使用了不确定功能,所以考虑模板设计模式,把该功能暴露出去, 让子类完成
runCode();
long endTime = System.currentTimeMillis();
System.out.println("runtime = " + (endTime - startTime) + "毫秒");
}
//为了让子类完成这部分不确定的功能, 所以定义成抽象方法.子类去重写.
public abstract void runCode();
}
class RunCode extends GetTime {
public void runCode() {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
}
class TemplateDemo {
public static void main(String[] args) {
GetTime gt = new RunCode();
gt.getTime();
}
}
作者:
戴乾刚
时间:
2013-3-18 14:18
runCode()方法就是暴露给外部,让子类复写的,将你想要获取其运行时间的代码放在runCode()方法内
runCode方法可以不定义成抽象的,就是说它里面可以封装默认的代码,
比如说里面是一个到100的for循环,默认是计算这100次循环所用的时间,而你觉得不爽,你要计算200次循环所用时间,那么你就把runCode()方法复写就行了
runCode方法是不是抽象的无所谓,只要将这个方法暴露出来能让子类复写就行了。
作者:
张权
时间:
2013-3-18 14:26
戴乾刚 发表于 2013-3-18 14:18
runCode()方法就是暴露给外部,让子类复写的,将你想要获取其运行时间的代码放在runCode()方法内
runCode方 ...
哦, 明白了,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2