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

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

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

Существует два типа клонирования: глубокое клонирование и поверхностное клонирование.

Преимущество использования шаблона проектирования прототипа

  • Мы можем добавить или удалить реализацию во время работы: клиент может установить или удалить прототип во время работы приложения.
  • Уменьшенное количество подклассов — фабричный метод часто создает иерархию классов Creator, которая параллельна иерархии классов продукта. Шаблон Prototype позволяет вам клонировать прототип вместо того, чтобы запрашивать фабричный метод для создания нового объекта.
  • Задание новых объектов путем изменения структуры
  • Задание новых объектов с помощью различных значений. Высокодинамичные системы позволяют вам определять новое поведение через композицию объектов, указывая значения для переменных объекта, а не определяя новые классы.

Недостатки шаблона проектирования прототипа

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