• 设计模式之模板方法模式


      模板方法模式为我们定义了一个算法的框架,框架之中定义了方法的执行步骤,但是具体每一步的方法要由具体的子类来实现。这样,在不改变整个算法结构的同时,就可以定义某个算法的特定步骤。

      模板方法模式的类结构如下:


     

     

     

     

     

     

     

     

     

      

      模板函数:在一个抽象基类中定义了一个模板方法,它规定了整个算法的结构并且定义了方法的执行步骤,通过调用若干其他的方法来实现这些步骤。该方法要在类外部被调用执行,所以要声明为public类型。同时,该方法拒绝重写,所以要用final来声明。

      步骤函数:整个算法分为若干个步骤执行,每个步骤由一个步骤方法来实现。如果该步骤的业务比较明确,可以直接在基类中实现为具体方法,由于不希望它在类外被调用,故而要声明为private方法;如果还不明确,则可以将该方法声明为的抽象方法,由继承它的子类来进行复写。为了保证子类可以复写到它,要声明为protected(子类权限)或者default(包内权限)。

    此时我们面对一个问题,如果算法执行这一系列步骤时,希望跳过某个步骤的时候,应该怎么办呢?这时需要在模板方法中提供一个所谓"hook方法",即在每个步骤前加上if判断;该方法提供一个默认实现或者由具体子类去实现,用来控制是否跳过某个具体的步骤,所以要声明为protected或者default。

    使用场景

    • 算法遵循相似的逻辑。
    • 重构代码时,将相同的代码抽取到父类中。
    • 重要的复杂的算法,算法核心可以使用模板算法。

    优点

      封装性好、复用性好、屏蔽细节、便于维护

    缺点

      由于单继承的限制,子类一旦继承了其他父类,就无法继承模板基类了。

  • 相关阅读:
    冲刺NO.2
    冲刺NO.1
    用户场景描述
    【洛谷T2695 桶哥的问题——吃桶】
    【洛谷P4445 【AHOI2018初中组】报名签到】
    清北学堂2019.5.4
    清北学堂2019.5.3
    清北学堂2019.5.2
    清北学堂培训2019.5.1
    清北学堂培训2019.4.30
  • 原文地址:https://www.cnblogs.com/cqumonk/p/4147103.html
Copyright © 2020-2023  润新知