Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Коли Prototype може бути небезпечним?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Патерн **Prototype** може бути небезпечним, коли клонування об'єктів стає неочевидним, неконтрольованим або некоректним, особливо в системах зі складними структурами даних і залежностями. **Ключове:** головна небезпека - поверхневе копіювання (shallow copy), при якому копіюються лише посилання, а не вкладені об'єкти, через що зміни в копії можуть зачепити оригінал.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняПатерн **Prototype** може бути небезпечним, коли клонування об'єктів стає **неочевидним, неконтрольованим або некоректним**, особливо в системах зі складними структурами даних і залежностями. --- ### 1. **Поверхневе vs. глибоке копіювання** Головна небезпека - **поверхневе копіювання** (shallow copy), при якому копіюються лише посилання, а не вкладені об'єкти. У результаті зміни в копії можуть **зачепити оригінал**, порушуючи ізоляцію даних: ```java Shape copy = original.clone(); copy.innerData.setColor("red"); // Змінює і оригінал! ``` Щоб уникнути цього, потрібно реалізувати **глибоке копіювання (deep copy)**, що вимагає додаткових зусиль. --- ### 2. **Складні залежності між об'єктами** Якщо об'єкт посилається на інші об'єкти (наприклад, батьківський, контекст, пул ресурсів), при клонуванні можна випадково: - скопіювати непотрібні посилання і викликати циклічні залежності; - втратити зв'язок із потрібним зовнішнім станом. Це робить поведінку копій **важкопередбачуваною**. --- ### 3. **Великі ієрархії та графи об'єктів** При глибокому копіюванні великих структур клонування стає **затратним за часом і пам'яттю**. Особливо небезпечно при рекурсивних посиланнях - можна випадково **створити нескінченний цикл копіювання**. --- ### 4. **Складність підтримки** Якщо в клас додаються нові поля, розробник може **забути включити їх у** `clone()`, що призведе до **частково скопійованих об'єктів** і важковловимих багів. --- ### 5. **Порушення інваріантів об'єкта** Деякі об'єкти не призначені для дублювання (наприклад, синглтони, підключення до БД, файлові дескриптори). Їх копіювання може призвести до **ресурсних конфліктів** або **неконсистентності стану**. --- ### 6. **Неявна поведінка** Клонування може приховувати важливі залежності - у коді не видно, що створюється нова копія, і це ускладнює налагодження і розуміння потоку даних. --- **Висновок:** Prototype стає небезпечним, коли об'єкт містить **вкладені структури, зовнішні ресурси або неочевидні залежності**. Без строгого контролю за типом копіювання і структурою даних він може призвести до **непередбачуваної поведінки, витоків пам'яті та порушення ізоляції об'єктів**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.