1 of 8

Паттерн Prototype

Илья Смирнов, 244

2 of 8

Пример применения

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

3 of 8

Проблема

Проектирование каркаса:

Классы нот и нотных станов специфичны для нашего приложения, а класс инструментов, имеющих графическое представление, принадлежит каркасу. Этому классу ничего неизвестно о том, как создавать экземпляры наших различных музыкальных классов и добавлять их в партитуру.

4 of 8

Решение

5 of 8

Назначение

Задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа.

6 of 8

Применимость

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

7 of 8

Структура

  • Prototype (Graphic) - прототип:

- объявляет интерфейс для клонирования самого себя;

  • ConcretePrototype (Staff — нотный стан, WholeNote — целаянота, HalfNote — половинная нота) — конкретный прототип:

- реализует операцию клонирования себя;

  • Client (GraphicTool) - клиент:

- создает новый объект, обращаясь к прототипу с запросом клонировать себя.

8 of 8

Плюсы

  • Добавление и удаление продуктов во время выполнения
  • Спецификация новых объектов путем изменения значений
  • Специфицирование новых объектов путем изменения структуры
  • Уменьшение числа подклассов
  • Динамическое конфигурирование приложения классами

Минусы

  • Каждый подкласс класса Prototype должен реализовывать операцию Clone, а это далеко не всегда просто