Шаблон проектирования прототипа отвечает за создание новых объектов без использования ключевого слова new, что позволяет клонировать ранее созданные объекты. Это классифицируется по образцу творения. Шаблон проектирования прототипа используется, когда создание объектов напрямую является очень дорогостоящим или дорогостоящим.

Когда мы реализуем шаблон прототипа, мы должны знать, нужна ли нам неглубокая или глубокая копия объекта.

Неглубокая копия

Это означает, что клонированный объект является просто копией точного ресурса.

Глубокая копия

Здесь нам нужно скопировать все, что находится внутри объекта, в новый объект. Это означает, что все переменные, объекты и т. Д., Объявленные внутри класса, должны быть скопированы в новый объект.

В следующем примере описывается, как мы можем реализовать шаблон проектирования прототипа в практическом сценарии.

Предположим, существует видео-магазин, который в основном продает клиентам фильмы и видеоигры.

Здесь основная цель - создать копии класса Video. На рисунке 1 показан общий обзор приложения.

Здесь я реализовал класс Video с двумя атрибутами и реализовал метод расчета цены видео на основе типа видео (фильм или видеоигра). Внутри класса Video я переопределил метод clone () при реализации интерфейса Cloneable. См. Следующий код.

После этого я реализовал классы Movie и VideoGame, унаследованные от класса Video. Здесь я переопределил метод calculatePrice (). См. Следующие коды.

Затем внутри класса VideoResigtry я реализовал конструктор, поскольку, когда пользователь создает объект VideoResigtry, он напрямую создает 2 отдельных экземпляра классов Movie и VideoGame и добавляет их в HashMap с их типами классов. Здесь я объявил другой метод для возврата объекта Video, когда задан тип видео. Обычно метод clone возвращает объекты в типе Object, поэтому мы должны преобразовать возвращаемый объект в нужный нам тип. См. Следующий код.

Кроме того, я реализовал Enum для хранения типов классов видео. См. Следующий код.

Наконец, я реализовал основной класс и назвал его MainApplication. См. Следующий код.

Следующее определяет полученный результат.

Movie{moviePrice=250.0, quality='HD', time=180}
Movie{moviePrice=250.0, quality='1080p', time=200}
Movie{moviePrice=250.0, quality='HD', time=180}

Когда мы говорим о выводах, я изменил время, качество и распечатал вывод. После этого я снова получил доступ к копии класса Movie, но это не вернуло экземпляр с изменениями, которые я применил ранее. Это происходит потому, что здесь он всегда содержит временный объект Movie (как я создал в классе VideoRegistry) и возвращает этот временный объект при вызове метода getVideo ().

Я снова реализовал шаблон прототипа, используя небольшой пример в javascript. См. Следующий код.

Здесь я добавил 2 набора атрибутов к видеообъекту в пространстве прототипа, а после этого я создал еще один объект видео, называемый newvideo. В журнале консоли выведите, есть ли в видео атрибут, называемый временем. Следующее определяет полученный результат.

true
true
true
false

В соответствии с этим, сначала он проверяет, находится ли атрибут времени как в пространстве объекта, так и в пространстве прототипа видео. Но второй журнал проверяет только атрибут объекта newvideo.



Выводы

В соответствии с тем, что обсуждалось выше.

  • Шаблон проектирования прототипа позволяет клонировать ранее созданные объекты.
  • Это классифицируется по образцу творения.
  • Это можно использовать, когда создание объектов напрямую очень дорого или дорого.

Ссылки