Главная

Шаблон креативного дизайна – Прототип

Низкая ресурсоёмкость при создании новых объектов.

Поделиться:
 

12+

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

Данный шаблон используется по нескольким причинам, но самая важная из них заключается в низкой ресурсоёмкости по сравнению со стандартными способами создания новых объектов — например, с использованием new.
Многие приложения загружают данные из внешних источников. Источником может быть что угодно: базы данных, файлы и т.д. Если каждый раз при создании объекта ваше приложение будет обращаться к внешнему источнику данных, то это негативно скажется на эффективности. И тут на помощь приходит шаблон Прототип.

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

Итак, первое — чтобы объект можно было клонировать, в нем должен быть реализован интерфейс клонирования. Сперва нужно переопределить метод clone, чтобы выполнить глубокое копирование клонируемого объекта. Если вы не знакомы с концепциями клонирования, вот статья, которая расскажет вам об этом подробнее. В данном примере мы не будем считывать данные с внешнего источника в целях краткости. Нужные данные будут добавлены с помощью хардкода.
В общем, код для класса Staff будет выглядеть следующим образом:

В нашем классе Staff ресурсоемкая операция выполняется в методе loadStaffNames(). loadStaffNames() является частным методом, который вызывается каждый раз, когда объект создается с использованием ключевого слова new. Если вам нужно создать новый объект с теми же данными, нет необходимости снова их загружать. Шаблон Прототип позволяет создавать экземпляры путем клонирования существующего объекта. В методе findStaffByName() мы также использовали уже загруженные данные для выполнения поиска. Если вашему приложению требуется перезагрузка/обновление данных из источника, тогда можно также реализовать данный метод в классе.

Единственный раз, когда вам нужно использовать ключевое слово new, — при создании родительского/оригинального объекта. Клонирование чего-либо подразумевает наличие объекта клонирования. Если у вас уже есть объект, вы можете клонировать его всякий раз, когда вам нужен другой экземпляр класса, вместо того, чтобы создавать новый. Это особенно важно в тех случаях, когда для создания объекта требуется обращение к внешнему источнику, так как это дорогостоящая операция. Затем вы можете использовать клон класса Staff:

Однако помните, каждый подход имеет свои плюсы и минусы. Не существует единственно правильного решения.

Спасибо!

Онлайн-курс по Java-разработке от Skillbox

12+