Шаблон дизайна прототипа - PullRequest
0 голосов
/ 24 апреля 2019

Почему мне нужно использовать Prototype Design Pattern? Вместо этого я могу напрямую назначить это значение правильно? например

согласно шаблону дизайна прототипа, мы должны клонировать как:

Typist typistCopy = (Typist)typist.Clone();

То же самое я могу сделать как:

Typist typistCopy = typist; 

Какое значение здесь имеет шаблон проектирования прототипов?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Две операции, которые вы демонстрируете, делают разные вещи.Какой из них вам нужен, зависит от того, что вы хотите сделать.

Этот не создает копию / клон объекта:

Typist typistCopy = typist;

Все, что он создаетновая переменная , которая ссылается на тот же объект в памяти.После выполнения этой строки кода у вас остается только один Typist объект.У вас просто есть две переменные, ссылающиеся на него.Любые изменения, внесенные в одну переменную, будут отражены в обеих, поскольку они оба ссылаются на один и тот же объект.

С другой стороны, это создает копию или клон изобъект:

Typist typistCopy = (Typist)typist.Clone();

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

После выполнения этой строки кода у вас теперь есть два Typist объектов, которые можно использовать и манипулировать независимо друг от друга.Любые изменения, внесенные в одну переменную, не будут отражены в другой, поскольку они ссылаются на разные объекты.

0 голосов
/ 24 апреля 2019

Чтобы добавить аналогию с реальным миром:

Page paper = (Page)yourPaper.Clone();

Это создает копию .Теперь есть две страницы бумаги, у вас есть оригинал, и кому-то была вручена копия.

Page paper = yourPaper;

Копия не была сделана.У вас есть лист бумаги, и кто-то другой тоже его взялТеперь вы оба держитесь за эту единственную страницу бумаги.

Вам нужно решить, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...