模板方法

Posted endian11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板方法相关的知识,希望对你有一定的参考价值。

  • 定义:定义一个操作中的算法框架,而将这些步骤延迟到子类中,使得子类不改变一个算法的结构即可重新定义算法的某些步骤

 

  • 在模板方法模式中有如下角色:
    • AbstractClass:抽象类,定义了一套算法框架
    • ConcreteClass:具体实现类
  • 模板方法的简单实现
    • 模板方法实际上就是封装固定的流程,像模板一样,第一步做什么,第二步做什么,都在抽象类中定义好。子类可以有不同的算法实现,在算法框架不被修改的前提下实现某些步骤的算法替换
    • 创建抽象类
      public abstract class Game {
          public final void play() {
              init();
              start();
              if (hook()) {
      
                  end();
              }
      
              saowei();//钩子方法,基类空实现,子类视情况决定是否实现
          }
      
          private void saowei() {
          }
      
          protected abstract void init();
      
          protected abstract void start();
      
          protected abstract void end();
      
          protected boolean hook() {
              return true;
          }
      }
      
    • 具体实现类
      public class AGame extends Game {
          @Override
          protected void init() {
              System.out.println("AGame::init()");
          }
      
          @Override
          protected void start() {
              System.out.println("AGame::start()");
          }
      
          @Override
          protected void end() {
              System.out.println("AGame::end()");
          }
      
          @Override
          protected boolean hook() {
              System.out.println("not execute AGame::end()");
              return false;
          }
      }
      

 

  • 使用场景
    • 多个子类共有的方法,并且逻辑基本相同
    • 面对重要、复杂的算法,可以把核心算法设计为模板方法,周边相关细节功能由各个子类实现
    • 需要通过子类来决定父类算法中的某个步骤是否执行,实现子类对父类的反向控制
  • 优点
    • 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码
    • 子类实现算法的某些细节,有助于算法的扩展
  • 缺点
    • 每个不同的实现都需要定义一个子类,这会导致类的个数增加,设计更加抽象

以上是关于模板方法的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段1——vue主模板

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段(vue主模板)

VS Code配置snippets代码片段快速生成html模板,提高前端编写效率

Eclipse 中的通用代码片段或模板

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段