黑马程序员技术交流社区

标题: 模板方法 [打印本页]

作者: 张凯zk47    时间: 2014-11-14 16:26
标题: 模板方法
模板方法设计模式:
模版方法概要:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分;那么这时就将不确定的部分暴露出去,由该类的子类去完成。
通过一个简单的实例来说明解决一类问题的思想  如下:
需求:获取一段程序运行的时间
原理:获取程序开始和结束的时间并相减即可

asbtract class GetTime
{
        public final void getTime()

        {
                long stsrt=System.currentTimeMillis();
                runcode();        //不确定的部分
                long end=System.currentTimeMillis();
                System.out.println("毫秒"+(end-start));
        }
        public asbtract void runcode();     //将不确定的部分暴露出去
}

class SubTime extends GetTime
{
        public void runcode()       //不确定的部分在子类中的实现
        {
                for(int i=0;i<500;i++)
                {System.out.print(i);}
        }
}
class Template
{
        public static void main(String[] args)
        {
                GetTime gt=new GetTime();
                gt.getTime();
        }
}
作者: 一叶障目    时间: 2014-11-14 16:32
抽象类不可以实例化对象,GetTime gt=new GetTime();
应该为GetTime gt=new SubTime();吧
作者: 叫我小强    时间: 2014-11-14 17:56
同意楼上的说法!!
作者: 一叶障目    时间: 2014-11-14 20:39
叫我小强 发表于 2014-11-14 17:56
同意楼上的说法!!

这是多态的体现,父类或接口引用指向自己的子类实例对象,面向对象里面的基础知识
作者: 张凯zk47    时间: 2014-11-15 13:13
是的,谢谢大神们的意见。很是受教,小弟正在努力追赶大神们的脚步!
修改后的代码如下:(再也不敢误人子弟咯)
package com.itheima;

abstract class GetTime
{
        public final void getTime()

        {
                long start=System.currentTimeMillis();
                runcode();        //不确定的部分
                long end=System.currentTimeMillis();
                System.out.println("毫秒"+(end-start));
        }
        public abstract void runcode();     //将不确定的部分暴露出去
}

class SubTime extends GetTime
{
        public void runcode()       //不确定的部分在子类中的实现
        {
                for(int i=0;i<500;i++)
                {System.out.print(i);}
        }
}
class Template
{
        public static void main(String[] args)
        {
                SubTime st=new SubTime();
                st.getTime();
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2