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

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

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

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

Содержание

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

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

Участники

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

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

Пример кода

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

/**
 * 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. */
 
    // ...
 
}

Литература

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования = 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:模板方法

Личные инструменты

Served in 0.184 secs.