java java面向对象-分析模板方法设计模式

20180329 java java面向对象-分析模板方法设计模式

模板方法设计模式定义:
在父类的一个方法中定义一个总体算法的骨架,而将某一些步骤延迟到子类中,因为不同的子类实现细节不同,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。




抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。




抽象父类至少提供的方法:
1)模板方法:一种通用的处理方法,即模板(总体算法的骨架);
2)抽象方法:一种具体的业务功能实现,由子类完成。






例如:


//操作的模板类
abstract class AbstractOperateTimeTemplate
{
  //模板方法(具体的算法骨架)
  final public long getTotaltime()//加final表示子类不能修改这个函数
                                  //只能调用这个函数。
  {
    long begin = System.currentTimeMillis();//开始时间
    this.doXX();//加this表示先找本类中的方法,找不到 再找子类中的doXX方法
    long end = System.currentTimeMillis();//结束时间
    long time = end - begin;//时间差
    return time;
  }


  //具体操作,子类必须覆盖
  protected abstract void doXX();
  /*加protected是为了不让外界
    调用该函数,只要子类调用该函数就行了
    一般这种函数都用doXX格式,又叫钩子方法
    
  */
}






//String连接10000次
class StringOperate extends AbstractOperateTimeTemplate
{
  public void doXX()
  {
    String str = "";
    for(int i=0;i<10000;i++)
    {
      str += i;
    }
  }
}




//int累加100000次
class IntOperate extends AbstractOperateTimeTemplate
{
  public void doXX()
  {
    int sum = 0;
    for(int i=0;i<10000;i++)
    {
      sum += 1;
    }
  }
}




//模板方法设计模式
class TemplateMethodDemo
{
  public static void main(String[] args)
  {
    //统计String连接1万次的时间差
    System.out.println(new StringOperate().getTotaltime());//输出430
    /*
    解析:调用子类中的getTotaltime()方法,因为子类中没有,所以调用
    父类中的getTotaltime()方法,而在 父类中的getTotaltime()方法又没有
    doXX()方法的实现,所以又去子类中找doXX()方法的实现。
    */






    //统计int累加1百万次的时间差
    System.out.println(new IntOperate().getTotaltime());//输出4
  }
}












有兴趣可以看这本书 :
阎宏:《JAVA与模式》


网上的 模板方法设计模式 地址:《JAVA与模式》之模板方法模式 - java_my_life - 博客园








































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值