Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Паттерн Prototype<br />
Применимость<br />
Используйте паттерн прототип, когда система не должна зависеть от того, как<br />
в ней создаются, компонуются и представляются продукты:<br />
а инстанцируемые классы определяются во время выполнения, например<br />
с помощью динамической загрузки;<br />
а для того чтобы избежать построения иерархий классов или фабрик, параллельных<br />
иерархии классов продуктов;<br />
а экземпляры класса могут находиться в одном из не очень большого числа<br />
различных состояний. Может оказаться удобнее установить соответствующее<br />
число прототипов и клонировать их, а не инстанцировать каждый раз<br />
класс вручную в подходящем состоянии.<br />
Структура<br />
Участники<br />
a Prototype (Graphic) - прототип:<br />
- объявляет интерфейс для клонирования самого себя;<br />
a ConcretePrototype (Staff- нотный стан, WholeNote - целая нота,<br />
Half Note - половинная нота) - конкретный прототип:<br />
- реализует операцию клонирования себя;<br />
a Client (GraphicTool) - клиент:<br />
- создает новый объект, обращаясь к прототипу с запросом клонировать<br />
себя.<br />
Отношения<br />
Клиент обращается к прототипу, чтобы тот создал свою копию.<br />
Результаты<br />
У прототипа те же самые результаты, что у абстрактной фабрики и строителя:<br />
он скрывает от клиента конкретные классы продуктов, уменьшая тем самым<br />
число известных клиенту имен. Кроме того, все эти паттерны позволяют клиентам<br />
работать со специфичными для приложения классами без модификаций.