zoukankan      html  css  js  c++  java
  • 模板方法模式 The Template Method Pattern

    模板方法模式“封装算法”
         在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。
         模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
     
    • 模板就是一个方法,将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。
    • 模板一般不是完整的,有部分实现在子类中
     
    类图:
    1、该抽象类中包含一个模板方法,模板方法在实现算法过程中,用到了下面两个原语操作(可以为具体的,也可以为抽象方法)
    2、可能有多个具体类,每个都实现了模板方法所需要的全部操作。
    3、当创建一个模板方法时,如果子类“必须”提供算法中某个方法的实现是,就使用抽象方法。
    4、如果算法的这个部分是可选的,就用钩子。对于钩子,子类可以选择实现这个钩子。
     钩子是一种被声明在抽象类中的方法,有一个默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。
    例如:
    public void templateMethod(){
         stepOne();
         stepTwo();
         if ( doThisOrNot() ){ //钩子,子类重写这个方法以决定是否执行stepAnother();
              stepAnother();
         }
    }
     
     
    设计原则:
    8、好莱坞原则:(高层组件对待底层组件的方式)
         别调用(打电话给)我们,我们会调用(打电话给)你。
    例如:
    1、CaffeineBeverage是我们的高层组件,它能够控制冲泡法的算法,必要时调用子类实现的方法。
    2、Tea和Coffee如果没有被调用,绝对不会直接调用抽象类。
     
     
    模板方法、策略、工厂方法模式比较
    模板方法:子类绝对如何实现算法中的步骤(用继承)
    策略:封装可互换的行为,然后使用委托来决定要采用哪一个行为(用组合)
    工厂方法:有子类决定实例化哪个具体的类
     

    (转载请注明出处 ^.^)

  • 相关阅读:
    jmeter非GUI模式运行单节点
    Feign详细构建过程及自定义扩展
    【springboot 源码解析】springboot 依赖管理
    通知神器——java调用钉钉群自定义机器人
    【乱纪】Markdown中常用的乱七八糟的东西
    【Java入地】 01 多线程与高并发
    【Linux】默认文本编辑器 vim 的入门与进阶
    【Linux】 安装搜狗输入法
    【Linux】系统发展史上的血雨腥风
    【Java进阶】01 Lambda 使用与进阶
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2989230.html
Copyright © 2011-2022 走看看