Що таке патерн Prototype?
Prototype (Прототип) - це породжувальний патерн проєктування, який дозволяє створювати нові об'єкти шляхом клонування вже наявних, замість створення їх з нуля через конструктор.
1. Суть ідеї
Замість того щоб створювати об'єкт заново і вручну ініціалізувати всі поля, можна взяти готовий екземпляр (прототип) і скопіювати його. Це особливо корисно, коли створення об'єкта:
- затратне (вимагає складної ініціалізації, мережевих або файлових операцій),
- або об'єкт уже налаштований потрібним чином і його простіше дублювати.
2. Коли використовувати
- Коли процес створення об'єктів складний або ресурсомісткий.
- Коли потрібно копіювати об'єкти з індивідуальними налаштуваннями.
- Коли система має бути незалежна від конкретних класів створюваних об'єктів (наприклад, дублікати різних типів).
3. Структура
- Prototype (інтерфейс) - оголошує метод
clone(). - ConcretePrototype - реалізує
clone()і повертає копію себе. - 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.