0
点赞
收藏
分享

微信扫一扫

Java系列(19)——模板模式


本系列博客汇总在这里:Java系列_汇总


目录

  • ​​一、第一种角色:抽象模板​​
  • ​​二、第二种角色:具体模板需要继承抽象模板​​

一、第一种角色:抽象模板

  1. 定义三种方法:第一个抽象方法需要子类去实现;
  2. 子类必须实现第二个扩展方法,是一个空方法;
  3. 子类可以去复写也可以不复写第三个私有的最终方法;
  4. 不可复写的第四个模板方法,这个方法中定义了每一个方法的执行顺序和逻辑。

二、第二种角色:具体模板需要继承抽象模板

  1. 需要实现抽象模板中的抽象方法,可以扩展抽象模板中的扩展方法

  2. 示例(框架)

    //抽象模板
    abstract class AbstractTemplate
    {
    /**
    *必须要实现的一个业务方法
    */
    public abstract void abstractMethod();

    /**
    *定义一个可以重写也可以不重写的方法
    */
    public void hookMethod()
    {

    }

    /**
    *必须不能被重写的方法
    */
    public final void concrateMethod()
    {

    }

    /**
    *模板方法,供其他类来使用
    */
    public void templateMethod()
    {
    hookMethod();
    abstractMethod();
    concrateMethod();
    }
    }
    //具体模板
    class ContrateTemplate extends AbstractTemplate
    {
    /**
    *实现具体的业务逻辑
    */
    public void abstractMethod()
    {
    System.out.println("具体逻辑");
    }

    public void hookMethod()
    {
    System.out.println("方法重写");
    }
    }
    class Welcome
    {
    public static void main(String[] args)
    {
    }
    }
  3. 示例(实例)

    //抽象模板
    abstract class CalTimeAbsTemplate
    {
    /**
    *必须要实现的一个业务方法
    */
    public abstract void doJob();

    /**
    *定义一个可以重写也可以不重写的方法
    */
    public void hookMethod()
    {
    System.out.println("程序开始执行");
    }

    /**
    *必须不能被重写的方法
    */
    public final long concrateMethod()
    {
    long currentTime = System.currentTimeMillis();
    return currentTime;
    }

    /**
    *模板方法,供其他类来使用
    */
    public long templateMethod()
    {
    hookMethod();
    //获得dojob执行前的时间
    long startTime = concrateMethod();
    doJob();
    try
    {
    Thread.sleep(5);//休眠5ms
    } catch (InterruptedException e)
    {
    System.out.println("出现错误");
    e.printStackTrace();
    }
    //获得dojob执行后的时间
    long endTime = concrateMethod();
    return endTime - startTime;
    }
    }
    //具体模板
    class ContrateTemplate extends CalTimeAbsTemplate
    {
    /**
    *实现具体的业务逻辑
    */
    public void abstractMethod()
    {
    System.out.println("具体逻辑");
    }

    public void doJob()
    {
    for(int i = 0; i <= 100; i++)
    {
    System.out.println("程序正在执行"+i+"%");
    }
    }
    }
    class Welcome
    {
    public static void main(String[] args)
    {
    //创建具体模板对象
    ContrateTemplate ct = new ContrateTemplate();
    //获得具体模板中的dojob的运行时间
    long doTime = ct.templateMethod();
    System.out.println("程序运行时间是:"+doTime+"毫秒");
    }
    }

    Java系列(19)——模板模式_子类

如有错误,欢迎指正!



举报

相关推荐

0 条评论