场景简介

技术负责人让小孙搭建一个游戏盒子,需要能够下载,启动,运行和停止各种各样的类型的游戏;一时间让小孙犯了难;虽然各种游戏的内容千变万化,但是管理游戏的生命周期却有迹可循,流程大致类似,实现细节各有差异;经过小孙的思考,他想到了用模板方法模式来实现。

模版方法模式:定义⼀个操作中的算法的框架,⽽将⼀些步骤延迟到⼦类中。使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。

类图介绍

image-1669092361422

代码示例

public abstract class Game{
  
      abstract void init();
      abstract  void start();
      abstract  void end();
      void paly(){
         init();
         start();
         .....
         end();
      }
      
}

public class Bastketball implements Game{

    @Override
     public void init(){
       System.out.println("init basketball");
     }
     
     @Override
     public void start(){
       System.out.println("start basketball");
     }
     
     @Override
     public void end(){
       System.out.println("end basketball");
     }
}

public class Football implements Game{

    @Override
     public void init(){
       System.out.println("init Football");
     }
     
     @Override
     public void start(){
       System.out.println("start Football");
     }
     
     @Override
     public void end(){
       System.out.println("end Football");
     }
}


public class TemplatePatternDemo {
   public static void main(String[] args) {
 
      Game game = new Basketball();
      game.start();
      System.out.println();
      game = new Football();
      game.start();      
   }
}

使用场景

  • 多个⼦类有公有的⽅法,并且逻辑基本相同时。

  • 重要、复杂的算法,可以把核⼼算法设计为模板⽅法,周边的相关细节功能则由各个⼦类实现。

  • 重构时,模板⽅法模式是⼀个经常使⽤的模式,把相同的代码抽取到⽗类中,然后通过钩⼦函数(⻅“模板⽅法模式的扩展”)约束其⾏为。