• 模板方法设计模式


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

    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修饰

    郭慕荣博客园
  • 相关阅读:
    Apache Calcite对多种异构数据源的支持
    如何成为优秀的技术Leader
    Spring @Scheduled执行原理解析
    Google Guava官方教程
    数据倾斜
    服务框架 Pigeon 的设计与实现
    递归算法的简单应用
    让ListView中的控件失去焦点:android:descendantFocusability="blocksDescendants"
    android:layout_weight的真实含义/android:layout_gravity的条件
    复杂布局的时候,不要复制布局
  • 原文地址:https://www.cnblogs.com/jelly12345/p/14704454.html
Copyright © 2020-2023  润新知