设计模式-模板模式


在模板模式中,抽象类公开定义的方式/模板来执行其方法。它的子类可以根据需要重写方法实现,但调用方式与抽​​象类定义的方式相同。该模式属于Behave模式类别。

执行

我们将创建一个Game抽象类,定义操作,并将模板方法设置为最终的,以便它不能被重写。CricketFootball是扩展Game并重写其方法的具体类。

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

模板模式 UML 图

步骤1

创建一个抽象类,其中模板方法为最终方法。

游戏.java

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

   //template method
   public final void play(){

      //initialize the game
      initialize();

      //start game
      startPlay();

      //end game
      endPlay();
   }
}

第2步

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

板球.java

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!");
   }
}

足球.java

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!");
   }
}

步骤3

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

模板模式演示.java

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

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();		
   }
}

步骤4

验证输出。

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!