Skip to main content

Що таке патерн Prototype?

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


1. Суть ідеї

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

  • затратне (вимагає складної ініціалізації, мережевих або файлових операцій),
  • або об'єкт уже налаштований потрібним чином і його простіше дублювати.

2. Коли використовувати

  • Коли процес створення об'єктів складний або ресурсомісткий.
  • Коли потрібно копіювати об'єкти з індивідуальними налаштуваннями.
  • Коли система має бути незалежна від конкретних класів створюваних об'єктів (наприклад, дублікати різних типів).

3. Структура

  1. Prototype (інтерфейс) - оголошує метод clone().
  2. ConcretePrototype - реалізує clone() і повертає копію себе.
  3. Client - працює з об'єктами через інтерфейс Prototype, не знаючи, який саме клас клонується.

4. Приклад (Java)

java
interface Prototype { Prototype clone(); } class Shape implements Prototype { int x, y; String color; public Shape clone() { Shape copy = new Shape(); copy.x = this.x; copy.y = this.y; copy.color = this.color; return copy; } }

Використання:

java
Shape original = new Shape(); original.x = 10; original.y = 20; original.color = "red"; Shape copy = (Shape) original.clone();

Тепер copy - це новий об'єкт з тими самими властивостями, але незалежний від початкового.


5. Переваги

  • Звільняє від потреби писати громіздкі конструктори.
  • Дозволяє дублювати складні об'єкти без знання їхньої внутрішньої структури.
  • Пришвидшує створення однотипних об'єктів.
  • Спрощує додавання нових типів без зміни клієнтського коду.

6. Недоліки

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

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

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.