模板方法设计模式

一:模板方法代码如下所示:

1、定义模板类

public abstract class TemplateMethod {

    /**模板方法:总体算法的骨架,总体不能修改
     * @return
     */
    final public Long typeOperate(){
        //当前系统的时间(毫秒)
        Long currentTime = System.currentTimeMillis();
        // 具体操作留给子类完成
        this.doWork();
        Long endTime = System.currentTimeMillis();
        return endTime - currentTime;
    }

    protected abstract void doWork();

}

子类实现类 IntOperate

public class IntOperate extends TemplateMethod{

    @Override
    public void doWork(){
        int num = 0;
        for (int i=0 ; i<10000000;i++ ){
            num += i;
        }
        System.out.println(num);
    }

}

子类实现类2 IntOperate

public class IntOperate extends TemplateMethod{

    @Override
    public void doWork(){
        int num = 0;
        for (int i=0 ; i<10000000;i++ ){
            num += i;
        }
        System.out.println(num);
    }

}

测试类

public class TemplateMethodDemo {

    public static void main(String[] args) {
        //统计String的10000次操作和int操作相加10000000次的时间差
        TemplateMethod templateMethod = new StringOperate();
        System.out.println( templateMethod.typeOperate());
        System.out.println(new IntOperate().typeOperate());
    }

}

二:模板方法设计模式总结

在父类的一个方法中定义一个总体算法的骨架(模板方法),而将某一些一些步骤延迟到子类中,因为不同的子类实现细节不同。模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤。抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。

使用场景
1、子类具有相同的方法,并且逻辑基本相同
2、代码重构时,模板方法会经常使用到,然后通过钩子函数(见模板方法扩展)约束其行为

抽象父类至少提供的方法:
模板方法:一种通用的处理方式,即模板(总体算法的骨架);
抽象方法:一种具体的业务功能实现,由子类完成;
注意:
抽象父类提供的模版方法只是定义了一个通用算法,其实现必须依赖子类的辅助。
模版方法作为模版样式不准子类覆写:
答:用final修饰,不让子类覆盖
抽象方法的权限又如何设置:
答:使用protected修饰

郭慕荣博客园
原文地址:https://www.cnblogs.com/jelly12345/p/14704454.html