Template Method

GOF Intent:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

توسط Template Method Design Pattern مي توان، توالي کلي اجراي متدها را در کلاس پدر تعيين نمود و به Subclass ها امکان داد که ضمن تبعيت از روال تعيين شده در کلاس پدر، جزئيات هر مرحله را خود تعيين نمايند.

نمونه کد:
همه بازي ها مراحل مشخصي دارند از جمله تعيين تعداد بازيکن ها و شروع و پايان و در انتها معرفي برنده. اما قواعد هربازي با بازي ديگر متفاوت است.

abstract class Game {

   protected int playersCount;
   abstract void initializeGame();
   abstract void makePlay(int player);
   abstract boolean endOfGame();
   abstract void printWinner();

   // Template Method
   public final void playGame(int playersCount) {
      this.playersCount = playersCount;
      initializeGame();
      while (!endOfGame()) {
         makePlay(j);
      }
      printWinner();
   }
}


class Monopoly extends Game {

   void initializeGame() {
      // Initialize players
      // Initialize money
   }

   void makePlay(int player) {
      // Process one turn of player
   }

   boolean endOfGame() {
      // Return true if game is over according to Monopoly rules
   }

   void printWinner() {
      // Display who won
   }

   /* Specific declarations for the Monopoly game. */
   // …
}


class Chess extends Game {

   void initializeGame() {
      // Initialize players
      // Put the pieces on the board
   }

   void makePlay(int player) {
      // Process a turn for the player
   }

   boolean endOfGame() {
      // Return true if in Checkmate or Stalemate has been reached
   }

   void printWinner() {
      // Display the winning player
   }

   /* Specific declarations for the chess game. */
   // …
}



منبع ها:

  1. Design Patterns – Elements of Reusable Object Oriented Software (GOF) By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  2. Template Method in Wikipedia

پست شده در دسته‌بندی نشده

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*


+ دو = 10

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

تماس با من: admin@paspars.com