Шаблонный метод (шаблон проектирования)

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску
Файл:Template Method UML.svg
Шаблонный метод (Template method): UML диаграмма классов.

Шаблонный метод (Template method) — шаблон проектирования, определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.

Применимость

  • Однократное использование инвариантной части алгоритма, с оставлением изменяющейся части на усмотрение наследникам.
  • Локализация и вычленение общего для нескольких классов кода для избежания дублирования.
  • Разрешение расширения кода наследниками только в определенных местах.

Участники

Abstract class (абстрактный класс) - определяет абстрактные операции, замещаемые в наследниках для реализации шагов алгоритма; реализует шаблонный метод, определяющий скелет алгоритма. Шаблонный метод вызывает замещаемые и другие, определенные в Abstract class, операции.

Concrete class (конкретный класс) - реализует замещаемые операции необходимым для данной реализации способом.

Пример кода

В примере шаблонный метод реализуется для игр, в которых игроки по очереди делают свой ход.

<source lang="java">

/**

* An abstract class that is common to several games in
* which players play against the others, but only one is
* playing at a given time.
*/

abstract class Game {

   protected int playersCount;
   abstract void initializeGame();
   abstract void makePlay(int player);
   abstract boolean endOfGame();
   abstract void printWinner();
   /* A template method : */
   final void playOneGame(int playersCount) {
       this.playersCount = playersCount;
       initializeGame();
       int j = 0;
       while (!endOfGame()) {
           makePlay(j);
           j = (j + 1) % playersCount;
       }
       printWinner();
   }

}

//Now we can extend this class in order to implement actual games:

class Monopoly extends Game {

   /* Implementation of necessary concrete methods */
   void initializeGame() {
       // Initialize money
   }
   void makePlay(int player) {
       // Process one turn of player
   }
   boolean endOfGame() {
       // Return true of game is over according to Monopoly rules
   }
   void printWinner() {
       // Display who won
   }
   /* Specific declarations for the Monopoly game. */
   // ...

}

class Chess extends Game {

   /* Implementation of necessary concrete methods */
   void initializeGame() {
       // 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. */
   // ...

}

</source>

Литература

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1 (также ISBN 5-272-00355-1)

Ссылки


Поведенческие шаблоны проектирования

Interpreter/Интерпретатор | Template Method/Шаблонный метод | Command/Команда | Chain of Responsibility/Цепочка обязанностей | Iterator/Итератор, Cursor | Mediator/Посредник | Memento/Хранитель, Token | Observer/Наблюдатель, Listener | State/Состояние | Strategy/Стратегия | Visitor/Посетитель | Event listener | Single-serving visitor | Hierarchical visitor |

bg:Шаблонен метод (шаблон) de:Schablonenmethode en:Template method pattern es:Template Method (patrón de diseño) fr:Patron de méthode (patron de conception) it:Template method ja:Template Method パターン pl:Metoda szablonowa (wzorzec projektowy) pt:Template Method th:เทมเพลทเมธอดแพตเทิร์น uk:Шаблонний метод (шаблон проектування) zh:模板方法

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....