Прототип (шаблон проектування)

Прототип (англ. Prototype) - шаблон проектування, відноситься до класу твірних шаблонів.

Призначення

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

Мотивація

Застосування

Слід використовувати шаблон Прототип коли:

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

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

екземпляри класу можуть знаходитись у одному з не дуже великої кількості станів. Може статися, що зручніше встановити відповідну кількість прототипів та клонувати їх, а не інстанціювати кожний раз клас вручну в слушному стані.

Структура

UML діаграма, що описує структуру шаблону проектування Прототип

  • Prototype – прототип:
    • визначає інтерфейс для клонування самого себе;
  • ConcretePrototype – конкретний прототип:
    • реалізує операцію клонування самого себе;
  • Client – клієнт:
    • створює новий об'єкт, звертаючись до прототипу із запитом клонувати себе.

Відносини

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

Реалізація

 

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

Фабричний метод (англ. Factory Method) — шаблон проектування, відноситься до класу твірних шаблонів.

Призначення

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

Мотивація

Застосування

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

  • класу не відомо заздалегідь, об'єкти яких саме класів йому потрібно створювати;
  • клас спроектовано так, щоб об'єкти, котрих він створює, специфікувалися підкласами;
  • клас делегує свої обов'язки одному з кількох допоміжних підкласів, та потрібно локалізувати знання про те, який саме підклас приймає ці обов'язки на себе.

Структура

UML діаграма, що описує структуру шаблону проектування Фабричний метод

  • Product — продукт:
    • визначає інтерфейс об'єктів, що створюються фабричним методом;
  • ConcreteProduct — конкретний продукт:
    • реалізує інтерфейс Product;
  • Creator — творець:
    • оголошує фабричний метод, що повертає об'єкт класу Product. Creator може також визначати реалізацію за замовчанням фабричного методу, що повертає об'єкт ConcreteProduct;
    • може викликати фабричний метод для створення об'єкта Product;
  • ConcreteCreator — конкретний творець:
    • заміщує фабричний метод, що повертає об'єкт ConcreteProduct.

Відносини

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

Реалізація

4. Структурні шаблони

Структурні шаблони (англ. structural patterns) — шаблони проектування, у яких розглядається питання про те, як із класів та об'єктів утворюються більші за розмірами структури.

Структурні шаблони рівня класу використовують спадковість для утворення композицій із інтерфейсів та реалізацій.

Структурні шаблони рівня об'єкта компонують об'єкти для отримання нової функціональності. Додаткова гнучкість у цьому разі пов'язана з можливістю змінювати композицію об'єктів під час виконання, що є неприпустимим для статичної композиції класів.