黑马程序员技术交流社区

标题: 关于模板方法设计模式的疑问 [打印本页]

作者: 张权    时间: 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