Очікує на перевірку

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

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Шаблонний метод (шаблон проектування))
Перейти до навігації Перейти до пошуку

Шаблонний метод (англ. Template Method) — шаблон проєктування, належить до класу шаблонів поведінки.

Призначення

[ред. | ред. код]

Визначає кістяк[en] алгоритму та дозволяє підкласам перевизначити деякі кроки алгоритму, не змінюючи структуру в цілому.

Застосовність

[ред. | ред. код]

Слід використовувати шаблон Шаблонний метод коли:

  • треба одноразово використати інваріантні частини алгоритму, залишаючи реалізацію поведінки, що змінюється, на розсуд підкласів;
  • треба відокремити та локалізувати в одному класі поведінку, що є загальною для усіх підкласів, щоб запобігти дублювання коду. Це хороший приклад техніки «винесення за лапки з метою узагальнення», що описана в роботі Вільяма Опдайка (англ. William Opdyke) та Ральфа Джонсона (англ. Ralph Johnson) [JO93,OJ93]. Спочатку ідентифікуються відмінності в існуючому коді, а потім вони виносяться у окремі операції. У кінцевому підсумку відмінні фрагменти коду замінюються шаблонним методом, з котрого викликаються нові операції;
  • для управління розширеннями підкласів. Можна визначити шаблонний метод таким чином, що він буде викликати операції-зачіпки у означених точках, дозволивши тим самим розширення тільки у цих точках.

Структура

[ред. | ред. код]
UML діаграма, що описує структуру шаблону проєктування Шаблонний метод
  • AbstractClass — абстрактний клас:
    • визначає абстрактні примітивні операції, що заміщуються у конкретних підкласах для реалізації кроків алгоритму;
    • реалізує шаблонний метод, що визначає скелет алгоритму. Шаблонний метод викликає примітивні операції, а також операції, означенні у класі AbstractClass, чи в інших об'єктах;
  • ConcreteClass — конкретний клас:
    • реалізує примітивні операції, що виконують кроки алгоритму у спосіб, котрий залежить від підкласу;

Взаємини

[ред. | ред. код]

ConcreteClass припускає, що інваріантні кроки алгоритму будуть виконані у AbstractClass.

Переваги та недоліки

[ред. | ред. код]

Переваги

[ред. | ред. код]
  • Немає копіювання коду.
  • Лише кілька методів потрібно перевизначити.
  • Гнучкість дозволяє підкласам вирішити, як здійснювати кроки в алгоритмі.

Недоліки

[ред. | ред. код]
  • Налагодження та розуміння послідовності алгоритму може іноді бути складною.
  • Підтримка структури шаблонів може бути проблемою, оскільки зміни на будь-якому рівні (низький рівень або високий рівень) можуть перешкоджати реалізації.

Зв'язок з іншими патернами

[ред. | ред. код]
  • Шаблонний метод задає кроки алгоритму, які реалізовують підкласи. Стратегія задає алгоритм який можна виконати декількома способами, до того ж вибрати ці способи на етапі виконання програми

Реалізація

[ред. | ред. код]

Джерела

[ред. | ред. код]

Література

[ред. | ред. код]

Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М. : «Вильямс», 2002. — 288 с. — ISBN 0-201-71594-5.