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如果没有被调用,绝对不会直接调用抽象类。
     
     
    模板方法、策略、工厂方法模式比较
    模板方法:子类绝对如何实现算法中的步骤(用继承)
    策略:封装可互换的行为,然后使用委托来决定要采用哪一个行为(用组合)
    工厂方法:有子类决定实例化哪个具体的类
     

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

  • 相关阅读:
    如何使用websocket实现前后端通信
    影响MySQL的性能(一)磁盘的选择
    springboot结合日志门面SLF4j和日志实现Logback的使用
    分享一个猜数字小游戏的脚本
    关于drop table *** purge (drop后不过回收站)
    关于DateBase link(dbLINK)及同义词
    关于数据更新(update)
    关于insert into(插入值)
    关于wm_concat(把一列的值,通过','进行分隔后,合并成一个值进行显示)
    关于PIVOT(用于行转列)
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2989230.html
Copyright © 2011-2022 走看看