Skip to content

Latest commit

 

History

History
106 lines (83 loc) · 2.89 KB

index-1.adoc

File metadata and controls

106 lines (83 loc) · 2.89 KB

Порождающие паттерны

Общие сведения

Создающие классы

Виртуальный конструктор — статический метод, заменяющий new и не зависящий от типа

Abstract factory (абстрактная фабрика)

include::images/abstract_factory.uml[]
  • Фабрика — это просто набор виртуальных конструкторов

  • A, B, C — это интерфейсы

  • Приходится писать не только сами объекты, но и фабрику

Пример

Фабрика по созданию окон, кнопок, полей ввода в зависимости от менеджера графики (X11, cairo, GtK, Qt, Mate, Windows, MacOS, …​)

Factory method (фабричный метод)

include::images/factory_method.uml[]
  • Частный случай абстрактной фабрики

  • IObj — это интерфейс

  • SomeObject не является интерфейсом

  • Дальнейшее расширение объекта фабричными методами create приводит к созданию фабрики

Пример

Диалоговое окно, у которого есть фабричный метод createButton, возвращающий кнопку в зависимости от графического менеджера

Builder (строитель)

include::images/builder.uml[]
  • Замена конструктора с 100500+ параметрами

  • Builder похож на абстрактную фабрику и компоновщик

  • Director похож на реализации стратегий

  • Разделение Product на части

Пример

Создание разных видов диалоговых окон в зависимости от графического менеджера

Prototype (прототип)

include::images/prototype.uml[]
  • Конструктор копирования

  • Оператор =

  • "Глубокая" копия объекта

  • Должны наследовать интерфейс Prototype

Пример

Клонирование сложного объекта в графическом редакторе

Singleton (одиночка)

include::images/singleton.uml[]
  • Чтобы не писать глобальную переменную

  • Проблема гонок во время создания

Пример

Системный логгер