Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LECTIONS_TPSPP!!!.doc
Скачиваний:
21
Добавлен:
16.12.2018
Размер:
1.41 Mб
Скачать

Шаблон «Фабричний метод» (Factory Method)

Назва та класифікація

Фабричний метод — шаблон, що породжує класи.

Призначення

Визначає інтерфейс для створення об’єкта, але рішення про те, який клас інстанціювати, залишає за підкласами. Таким чином, фабричний метод дозволяє класу делегувати дію інстанціювання підкласам.

Інші назви

Віртуальний конструктор (Virtual Constructor).

Підстави для застосування

1. Класові наперед невідомо, об’єкти яких класів йому потрібно створювати.

2. Клас спроектовано так, щоб об’єкти, які він створює, специфікувались підкласами.

3. Клас делегує свої обов’язки одному з кількох допоміжних підкласів, і ви плануєте локалізувати знання про те, який клас бере ці обов’язки на себе.

Структура

Учасники

1. Product — продукт:

- визначає інтерфейс об’єктів, створюваних фабричним методом.

2. ConcreteProduct — конкретний продукт:

- реалізує інтерфейс Product.

3. Creator — творець.

- оголошує фабричний метод, що повертає об’єкт типу Product;

- може викликати фабричний метод для створення об’єкту Product.

4. ConcreteCreator — конкретний творець:

- заміщує фабричний метод, що повертає об’єкт ConcreteProduct.

Відношення

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

Результати

1. (+) Надає підкласам можливість виконання операцій-зачіпок (hooks).

2. (+) З’єднує паралельні ієрархії класів.

Шаблон «Прототип» (Prototype)

Назва та класифікація

Прототип — шаблон, що породжує об’єкти.

Призначення

Задає види створюваних об’єктів за допомогою екземпляра-прототипу і створює нові об’єкти шляхом копіювання цього прототипу.

Підстави для застосування

1. Інстанційовані класи визначаються під час виконання, наприклад, за допомогою динамічного завантаження.

2. Щоб запобігти побудови ієрархій класів чи фабрик, паралельних до ієрархії класів продуктів.

3. Екземпляри класів можуть знаходитися в одному зі станів, причому множина можливих станів є не дуже великою. Може бути зручніше встановити відповідну кількість прототипів та клонувати їх, а не створювати об’єкт кожного разу в потрібному стані.

Структура

Загальна структура шаблону:

Приклад (візуальний редактор нотного стану):

Учасники

1. Prototype — прототип:

- визначає інтерфейс для клонування самого себе.

2. ConcretePrototype — конкретний прототип:

- реалізує операцію клонування самого себе.

3. Client — клієнт:

- створює новий об’єкт, звертаючись до прототипу з запитом клонувати себе.

Відношення

Клієнт звертається до прототипу, щоб він створив копію самого себе.

Результати

«Прототип» приносить ті ж самі результати, що й абстрактна фабрика чи будівельник: він приховує від клієнта конкретні класи продуктів, зменшуючи тим самим кількість відомих клієнту імен. Крім того, всі ці шаблони дозволяють клієнтам працювати зі специфічними для програми класами без модифікацій.

1. (+) Додавання та видалення типів продуктів під час виконання.

2. (+) Специфікація нових об’єктів шляхом зміни властивостей, а не опису нових класів.

3. (+) Специфікація нових об’єктів шляхом зміни структури.

4. (+) Зменшення кількості підкласів.

5. (+) Динамічна конфігурація програми за допомогою класів.

6. (–) Інколи дуже складно реалізувати операцію клонування об’єкта.

7. (–) Реалізація ускладнюється, коли прототипи потрібно не тільки клонувати, а й ініціалізувати стан клонів певними особливими значеннями.

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]