Padrões de design - padrão de modelo

No padrão Template, uma classe abstrata expõe formas / modelos definidos para executar seus métodos. Suas subclasses podem substituir a implementação do método conforme a necessidade, mas a invocação deve ser da mesma forma definida por uma classe abstrata. Esse padrão está incluído na categoria de padrão de comportamento.

Implementação

Vamos criar uma classe abstrata Game definindo operações com um método de template definido como final para que não possa ser sobrescrito. Cricket e Football são classes concretas que estendem Game e substituem seus métodos.

TemplatePatternDemo , nossa classe de demonstração, usará Game para demonstrar o uso do padrão de template.

Passo 1

Crie uma classe abstrata com um método de modelo sendo final.

Game.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();
   }
}

Passo 2

Crie classes concretas estendendo a classe acima.

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

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

etapa 3

Use o método de template do Game play () para demonstrar uma forma definida de jogar.

TemplatePatternDemo.java

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

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

Passo 4

Verifique a saída.

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!