• Главная
  • Карта сайта
Не найдено

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

  1. Призначення паттерна Template Method
  2. Обговорення паттерна Template Method
  3. Структура паттерна Template Method
  4. Приклад паттерна Template Method
  5. Використання паттерна Template Method
  6. Реалізація патерну Template Method

патерни » патерни поведінки »Template Method

Призначення паттерна Template Method

  • Патерн Template Method визначає основу алгоритму і дозволяє подклассам змінити деякі кроки цього алгоритму без зміни його загальної структури.
  • Базовий клас визначає кроки алгоритму за допомогою абстрактних операцій, а похідні класи їх реалізують.

розв'язувана проблема

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

Обговорення паттерна Template Method

Проектувальник компонента вирішує, які кроки алгоритму є незмінними (або стандартними), а які змінними (або налаштованим). Абстрактний базовий клас реалізує стандартні кроки алгоритму і може надавати (чи ні) реалізацію за замовчуванням для параметрів, що кроків. Змінні кроки можуть (або повинні) надаватися клієнтом компонента в конкретних похідних класах.

Проектувальник компонента визначає необхідні кроки алгоритму, порядок їх виконання, але дозволяє клієнтам компонента розширювати або заміщати деякі з цих кроків.

Патерн Template Method широко застосовується в каркасах додатків (frameworks). Кожен каркас реалізує незмінні частини архітектури в предметної області, а також визначає ті частини, які можуть або повинні налаштовуватися клієнтом. Таким чином, каркас додатка стає "центром всесвіту", а налаштування клієнта є просто "третьою планетою від Сонця". Цю інвертовану структуру коду ласкаво називають принципом Голлівуду - "Не дзвоніть нам, ми самі вам зателефонуємо".

Структура паттерна Template Method

UML-діаграма класів паттерна Template Method

UML-діаграма класів паттерна Template Method

Реалізація методу templateMethod () викликає методи stepOne (), stepTwo () і stepThree (). Метод stepTwo () є "заміщає" методом. Він оголошений в базовому класі, а визначається в похідних класах. Каркаси додатків широко використовують патерн Тemplate Method. Весь повторно використовуваний код визначається в базових класах каркаса, потрібну поведінку системи клієнти визначають в створюваних похідних класах.

Весь повторно використовуваний код визначається в базових класах каркаса, потрібну поведінку системи клієнти визначають в створюваних похідних класах

Приклад паттерна Template Method

Патерн Template Method визначає основу алгоритму і дозволяє подклассам змінити деякі кроки цього алгоритму без зміни його загальної структури. Будівельники будівель використовують шаблонний метод при проектуванні нових будинків. Тут можуть використовуватися вже існуючі типові плани, в яких модифікуються тільки окремі частини.

Використання паттерна Template Method

  1. Досліджуйте алгоритм і вирішите, які кроки є стандартними, а які повинні визначатися підкласами.
  2. Створіть новий абстрактний базовий клас, в якому буде реалізований принцип "не дзвоніть нам, ми самі вам зателефонуємо".
  3. Помістіть в новий клас основу алгоритму (шаблонний метод) і визначення стандартних кроків.
  4. Для кожного кроку, що вимагає різні реалізації, визначте "заміщає" віртуальний метод. Цей метод може мати реалізацію за замовчуванням або бути чисто віртуальним.
  5. Викличте "заміщає" метод з шаблонного методу.
  6. Створіть підкласи від нового абстрактного базового класу і реалізуйте в них "заміщають" методи.

Особливості паттерна Template Method

  • Template Method використовує спадкування для модифікації частини алгоритму. стратегія використовує делегування для модифікації всього алгоритму.
  • Стратегія змінює логіку окремих об'єктів. Template Method змінює логіку всього класу.
  • фабричні методи часто викликаються з шаблонних методів.

Реалізація патерну Template Method

  1. Стандартизує основу алгоритму в шаблонному методі базового класу.
  2. Для кроків, які потребують особливої ​​реалізації, визначте "заміщають" методи.
  3. Похідні класи реалізують "заміщають" методи.

#include <iostream> using namespace std; class Base {void a () {cout << "a"; } Void c () {cout << "c"; } Void e () {cout << "e"; } // 2. Для кроків, які потребують особливої ​​реалізації, визначте // "заміщають" методи. virtual void ph1 () = 0; virtual void ph2 () = 0; public: // 1. стандартизує основу алгоритму в шаблонному методі // базового класу void execute () {a (); ph1 (); c (); ph2 (); e (); }}; class One: public Base {// 3. Похідні класи реалізують "заміщають" методи. / * Virtual * / void ph1 () {cout << "b"; } / * Virtual * / void ph2 () {cout << "d"; }}; class Two: public Base {/ * virtual * / void ph1 () {cout << "2"; } / * Virtual * / void ph2 () {cout << "4"; }}; int main () {Base * array [] = {& One (), & Two ()}; for (int i = 0; i <2; i ++) {array [i] -> execute (); cout << '\ n'; }}

Висновок програми:

джерело: http://sourcemaking.com/design_patterns/template_method/

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью