zoukankan      html  css  js  c++  java
  • 模板方法

    应用场景


    • 多个子类有共有的方法并且执行流程基本相同
    • 重要,复杂的算法,可以把核心算法设计为模板方法,其他小细节由子类完成
    • 重构时,模板方法比较常用,一般将子类的方法抽象到父类中去

    类图介绍


      模板方法其实我们早都接触过,只是不知道它有这个名字而已。其核心就是将子类中共同的部分提取出来放到父类里面去,这里提取的一般是类中的流程控制部分,而在流程控制中每个模块的具体实现则可以在子类中来完成。

    模板方法,顾名思义就是为方法提供模板。所以这里为方法提供的模板就是templateMethod方法,而doSomething就是基本方法,该方法可以由父类来实现也可以由子类实现。

    示例代码


    抽象模板类

    在抽象模板中我们定义了doSomething()抽象方法,该方法我们成为钩子函数,它需要子类去实现。子类可以通过该钩子函数来控制间接控制模板方法的执行流程。并且为了安全起见,模板方法被final修饰来防止被随意修改。

    abstract class AbstractClass{
        //基本方法
        protected abstract void doSomething();
        
        protected  void doAnything(){};
        //模板方法
        public final void templateMethod(){
            this.doAnything();
            this.doSomething();
        }
    }

    具体模板类

    class ConcreteClass extends AbstractClass{
        //实现基本的方法
        @Override
        protected void doSomething() {
            // TODO     
        }    
    }

    场景类

    class Client{
        public static void main(String[] args) {
            AbstractClass ac = new ConcreteClass();
            //调用模板方法
            ac.templateMethod();
        }
    }

    总结


    优点:充分利用封装的特性,将公共的部分提取出来。行为由父类控制,由子类实现。

    缺点:子类会影响到父类的执行结果

  • 相关阅读:
    memory consistency
    网页基础
    ECC
    RSA
    argparse模块
    009-MySQL循环while、repeat、loop使用
    001-mac搭建Python开发环境、Anaconda、zsh兼容
    013-在 Shell 脚本中调用另一个 Shell 脚本的三种方式
    012-Shell 提示确认(Y / N,YES / NO)
    014-docker-终端获取 docker 容器(container)的 ip 地址
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5816947.html
Copyright © 2011-2022 走看看