Прототип (шаблон проектирования)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Шаблон проектирования
Прототип
Prototype
Тип:

порождающий

Описан в Design Patterns

Да

Прототип, (англ. Prototype)порождающий шаблон проектирования.

Назначение[править | править вики-текст]

Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа. Он позволяет уйти от реализации и позволяет следовать принципу "программирование через интерфейсы". В качестве возвращающего типа указывается интерфейс\абстрактный класс на вершине иерархии, а классы наследники могут подставить туда наследника, реализующего этот тип.

Проще говоря, это паттерн создания объекта через клонирование другого объекта вместо создания через конструктор.

Применимость[править | править вики-текст]

Паттерн используется чтобы:

  • избежать дополнительных усилий по созданию объекта стандартным путем (имеется в виду использование конструктора, т. к. в этом случае также будут вызваны конструкторы всей иерархии предков объекта), когда это непозволительно дорого для приложения.
  • избежать наследования создателя объекта (object creator) в клиентском приложении, как это делает паттерн abstract factory.

Используйте этот шаблон проектирования, когда система не должна зависеть от того, как в ней создаются, компонуются и представляются продукты:

  • инстанцируемые классы определяются во время выполнения, например с помощью динамической загрузки;
  • для того чтобы избежать построения иерархий классов или фабрик, параллельных иерархии классов продуктов;
  • экземпляры класса могут находиться в одном из нескольких различных состояний. Может оказаться удобнее установить соответствующее число прототипов и клонировать их, а не инстанцировать каждый раз класс вручную в подходящем состоянии.
Prototype.gif

Примеры[править | править вики-текст]

Пример на C++[править | править вики-текст]

Пример на Java[править | править вики-текст]

Пример на C#[править | править вики-текст]

Пример на PHP[править | править вики-текст]

Пример на Ruby[править | править вики-текст]

Пример на VB.NET[править | править вики-текст]

Пример на Delphi[править | править вики-текст]

Пример на CoffeeScript[править | править вики-текст]

Литература[править | править вики-текст]

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1 (также ISBN 5-272-00355-1)

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]