A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张凯zk47 中级黑马   /  2014-11-14 16:26  /  1174 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

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();
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

5 个回复

倒序浏览
抽象类不可以实例化对象,GetTime gt=new GetTime();
应该为GetTime gt=new SubTime();吧

点评

但是为什么不是SubTime gt = new SubTime(); 前后的名称可以不一样吗???  发表于 2014-11-14 17:58

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
同意楼上的说法!!
回复 使用道具 举报
叫我小强 发表于 2014-11-14 17:56
同意楼上的说法!!

这是多态的体现,父类或接口引用指向自己的子类实例对象,面向对象里面的基础知识
回复 使用道具 举报
是的,谢谢大神们的意见。很是受教,小弟正在努力追赶大神们的脚步!
修改后的代码如下:(再也不敢误人子弟咯)
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();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马