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

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

  • 相关阅读:
    MERGE引擎 分表后 快速查询所有数据
    MYSQL导入中文数据乱码的四种解决办法
    数据库中为什么不推荐使用外键约束?
    Word转PDF
    YII2 更新数据不成功
    YII2 使用curl请求,返回false
    Yii集成PHPWord
    网站安全DDOS攻击及监测
    nginx日志
    定时任务秒级执行
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2989230.html
Copyright © 2011-2022 走看看