Что такое шаблон проектирования прототипа?

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

Проблема.

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

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

Решение.

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

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

Схема классов UML.

Участники.

  • Прототип — объявляет интерфейс для собственного клонирования.
  • ConcretePrototype — реализует операцию клонирования самого себя.
  • Клиент — создает новый объект, запрашивая у прототипа клонирование самого себя.

Код на C#.

Пожалуйста, взгляните на код.

Разница между глубоким и поверхностным копированием.

• В глубокой копии. Копирует все свойства объектов.
• В неглубокой копии. Он копирует только объекты верхнего уровня, а нижние уровни содержат ссылки.

Преимущества.

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

Недостаток.

  • Клонирование сложных объектов с циклическими ссылками может быть очень сложным.

Когда использовать шаблон прототипа?

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

Заключение.

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

Автор: Марк Кеннет Ломио | Старший инженер-программист | BlastAsia, Inc.

Ссылки: