Wzorce projektowe - wzorzec szablonu

We wzorcu szablonu, klasa abstrakcyjna ujawnia zdefiniowane sposoby / szablony wykonywania swoich metod. Jego podklasy mogą przesłonić implementację metody zgodnie z potrzebą, ale wywołanie ma być takie samo, jak zdefiniowane przez klasę abstrakcyjną. Ten wzorzec należy do kategorii wzorców zachowania.

Realizacja

Zamierzamy stworzyć abstrakcyjną klasę Game definiującą operacje z metodą szablonu ustawioną na ostateczną, aby nie można jej było przesłonić. Krykiet i piłka nożna to konkretne klasy, które rozszerzają grę i zastępują jej metody.

TemplatePatternDemo , nasza klasa demonstracyjna, użyje Game do zademonstrowania użycia wzorca szablonu.

Krok 1

Utwórz klasę abstrakcyjną z metodą szablonu jako ostateczną.

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

Krok 2

Utwórz konkretne klasy rozszerzające powyższą klasę.

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

Krok 3

Użyj Gra „s szablonu metody play (), aby wykazać określony sposób grania grę.

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

Krok 4

Sprawdź dane wyjściowe.

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!