Функция клона для шаблона дизайна прототипа? - PullRequest
0 голосов
/ 03 сентября 2018

Одна из наиболее важных частей шаблона разработки прототипа в ООП заключается в том, что мы не создаем новые объекты с нуля, мы просто клонируем их с помощью функции clone() из существующего объекта.

Так является ли функция clone() глубокой или мелкой копией?

Если это глубокая копия, то я все понимаю, но если она мелкая, будет беспорядок, если два разных объекта (один создан из другого с использованием шаблона прототипа) будут наблюдать одни и те же объекты состояния, чем это означает, что эти объекты не ничем не отличаются (они связаны, поскольку имеют общие объекты состояния).

Может кто-нибудь прояснить мне эту ситуацию?

1 Ответ

0 голосов
/ 03 сентября 2018

Java Object clone метод реализует Prototype шаблон проектирования. Новый экземпляр создается с использованием экземпляра prototypical. Но clone просто дает вам мелкую копию, это не глубокая копия. Так что это довольно опасная копия. Если вам нужна глубокая копия, вы должны явно реализовать ее. clone копирует примитивные значения, но не ссылки на объекты. Таким образом, и оригинал, и клон будут указывать на одни и те же ссылки на объекты, и если один из них модифицирует, то же самое применяется и к другому, оставляя ваши объекты в опасном состоянии.

...