Template Pattern 设计模式怎么用?该怎么实现模板方法?

文章导读
Previous Quiz Next 概述 在模板模式中,一个抽象类公开了执行其方法的定义方式/模板。其子类可以根据需要重写方法实现,但调用方式必须与抽象类定义的相同。此模式属于行为模式类别。
📋 目录
  1. 概述
  2. 实现
  3. 步骤 1
  4. 步骤 2
  5. 示例 - 模板模式的使用
A A

设计模式 - 模板模式



Previous
Quiz
Next

概述

在模板模式中,一个抽象类公开了执行其方法的定义方式/模板。其子类可以根据需要重写方法实现,但调用方式必须与抽象类定义的相同。此模式属于行为模式类别。

实现

我们将创建一个Game抽象类,定义带有模板方法的operation,并将其设置为final以防止被重写。CricketFootball是扩展Game的具体类,并重写了其方法。

TemplatePatternDemo,我们的演示类,将使用Game来演示模板模式的使用。

Template Pattern UML Diagram

步骤 1

创建一个带有final模板方法的抽象类。

Game.java

package com.;

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //模板方法
   public final void play(){

      //初始化游戏
      initialize();

      //开始游戏
      startPlay();

      //结束游戏
      endPlay();
   }
}

步骤 2

创建扩展上述类的具体类。

Cricket.java

package com.;

public class Cricket extends Game {

   @Override
   void endPlay() {
      System.out.println("Cricket Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }
}

Football.java

package com.;

public class Football extends Game {

   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Football Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

示例 - 模板模式的使用

使用Game的模板方法play()来演示定义的游戏玩法方式。

TemplatePatternDemo.java

package com.;

public class TemplatePatternDemo {
   public static void main(String[] args) {

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();		
   }
}
abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //模板方法
   public final void play(){

      //初始化游戏
      initialize();

      //开始游戏
      startPlay();

      //结束游戏
      endPlay();
   }
}
class Cricket extends Game {

   @Override
   void endPlay() {
      System.out.println("Cricket Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }
}
class Football extends Game {

   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Football Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

输出

验证输出。

Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!

Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!