Skip to main content

Коли Prototype може бути небезпечним?

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


1. Поверхневе vs. глибоке копіювання

Головна небезпека - поверхневе копіювання (shallow copy), при якому копіюються лише посилання, а не вкладені об'єкти. У результаті зміни в копії можуть зачепити оригінал, порушуючи ізоляцію даних:

java
Shape copy = original.clone(); copy.innerData.setColor("red"); // Змінює і оригінал!

Щоб уникнути цього, потрібно реалізувати глибоке копіювання (deep copy), що вимагає додаткових зусиль.


2. Складні залежності між об'єктами

Якщо об'єкт посилається на інші об'єкти (наприклад, батьківський, контекст, пул ресурсів), при клонуванні можна випадково:

  • скопіювати непотрібні посилання і викликати циклічні залежності;
  • втратити зв'язок із потрібним зовнішнім станом. Це робить поведінку копій важкопередбачуваною.

3. Великі ієрархії та графи об'єктів

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


4. Складність підтримки

Якщо в клас додаються нові поля, розробник може забути включити їх у clone(), що призведе до частково скопійованих об'єктів і важковловимих багів.


5. Порушення інваріантів об'єкта

Деякі об'єкти не призначені для дублювання (наприклад, синглтони, підключення до БД, файлові дескриптори). Їх копіювання може призвести до ресурсних конфліктів або неконсистентності стану.


6. Неявна поведінка

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


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

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

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

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