Отправляет email-рассылки с помощью сервиса Sendsay

Code Blog

  Все выпуски  

Блог о программировании Паттерн проектирования Прототип (Prototype) на языке C#


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

Как я уже писал ранее, существует три вида паттернов проектирования:

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

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

Давайте рассмотрим диаграмму паттерна Прототип

Прототип (Prototype)
  • Client — использует экземпляры классов и создает новые при помощи клонирования
  • Prototype — базовый абстрактный класс или интерфейс определяющий прототип и метод клонирования
  • ConcretePrototype — конкретные наследники базового класса или интерфейса прототипирования, реализующие его. Один из экземпляров создан на основе второго.

Рассмотрим основную логику работы паттерна Прототип. Здесь нам нужно немного отойти в сторону. Нужно понимать, что в языке C# существуют переменные двух типов:

  • Переменные значения — это все переменные стандартных типов данных (int, bool, double и т.д.), которые имеют фиксированный размер и хранятся в стеке.
  • Ссылочные значения — это переменные, данные которых хранятся в куче, а в стеке хранится только указатель на область памяти. В эту категорию попадают string и все другие системные или создаваемые тобой классы.

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

На самом деле, реализация данного паттерна очень часто используется на практике, поэтому в пакет .NET уже включен интерфейс для клонирования объектов. Чтобы не изобретать велосипед мы будем пользоваться им.

Продолжение с примером исходного кода доступно в на сайте Блог о программировании.

P.S. Присоединяйся к любой удобной для тебя социальной сети. Для меня очень важно оставаться с тобой на связи, ведь у меня есть еще много полезной информации о программировании для тебя, которой я хочу с тобой поделиться.

вконтактеfacebooktelegramtwittergoogle+одноклассникидзенжж


В избранное