09.04.2016 Views

Priemioop

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 />

работать со специфичными для приложения классами без модификаций.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!