Шаблонный метод (шаблон проектирования)
Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Шаблонный метод (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)
[править] Ссылки
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:模板方法