Прототип (Prototype)¶
Prototype создает новый объект копированием уже подготовленного образца.
Опора на ООП¶
Prototype в первую очередь опирается на инкапсуляцию состояния: объект сам определяет, что именно будет копироваться как образец. Полиморфизм полезен, если разные прототипы клонируются через единый контракт.
Что показывает пример на 1С¶
- В
CommonModules.InitializeсобираетсяValueTable-прототип с заранее настроенными колонкамиName,ValueиHash. - Затем новые таблицы создаются не с нуля, а через
Prototype.Copy(). - Даже такой компактный пример хорошо показывает главную идею: сначала готовим шаблон, потом быстро клонируем его под конкретные задачи.
Пример¶
Особенность платформы¶
Для 1С это важное практическое замечание: Prototype не всегда нужно реализовывать вручную, потому что для некоторых объектов платформы он уже встроен.
Самый понятный пример - ValueTable.
- разработчик один раз подготавливает таблицу-образец;
- затем получает новые экземпляры через
Copy()/Скопировать(); - то есть механизм клонирования уже дан самой платформой.
Поэтому в ряде задач Prototype в 1С - это не отдельный самописный паттерн, а грамотное использование уже готового платформенного API.
Именно поэтому ValueTable так хорошо подходит для объяснения паттерна:
- таблица выступает как подготовленный образец;
Copy()создает новый объект на основе этого образца;- клиентский код работает с копией, а не пересобирает структуру заново.
Практически это означает простое правило: если платформа уже умеет безопасно копировать объект, сначала стоит использовать встроенный механизм, а не проектировать собственный Clone().
Где полезен в 1С¶
- для повторного создания однотипных
ValueTable, структур и настроек; - когда шаблон содержит много заранее определенных полей;
- когда копирование проще и безопаснее, чем повторная ручная сборка.
Когда паттерн лишний¶
- если объект примитивен и собирается в несколько строк;
- если копия должна сильно отличаться от оригинала;
- если трудно контролировать глубокое и поверхностное копирование.