Python

Паттерны проектирования. Ситуативная таблица.

Дополнительно о паттернах можно почитать в посте об ООП.

Предложенная таблица поможет соотнести реальные задачи программиста с подходящими паттернами проектирования:

Описание ситуацииНазвание паттерна
Нужно гарантировать, что у программы будет только один объект для работы с настройками, логами или базой данных.Singleton (Одиночка)
Есть готовый класс, но его интерфейс (названия методов) не совпадает с тем, который ожидает программа.Adapter (Адаптер)
Нужно создавать объекты, но заранее не известно, какого именно типа они должны быть (тип определяется во время работы программы).Factory Method (Фабричный метод)
В программе есть объект (например, кнопка или данные), за изменением которого должны следить другие части системы и реагировать на них.Observer (Наблюдатель)
Если есть несколько способов решить задачу (например, разные методы сортировки или разные способы оплаты), и необходимо переключаться между ними «на лету».Strategy (Стратегия)
Нужно добавить объекту новые обязанности (например, обернуть текст в HTML-теги или добавить шифрование), не меняя код самого объекта.Decorator (Декоратор)
Сложная система состоит из множества подсистем, и вы хотите предоставить пользователю один простой метод (единую «точку входа») для работы с ними.Facade (Фасад)
Объект должен менять свое поведение в зависимости от внутреннего состояния (например, заказ в интернет-магазине ведет себя по-разному в статусах «Новый», «Оплачен», «Доставлен»).State (Состояние)
Процесс создания объекта очень сложный, состоит из множества шагов или требует передачи огромного количества параметров в конструктор.Builder (Строитель)
Нужно совершить какое-то действие над группой объектов разных классов, не меняя код этих классов (например, экспорт данных в JSON для разных типов фигур).Visitor (Посетитель)
Нужно превратить запрос или действие в отдельный объект, чтобы его можно было передавать как параметр, ставить в очередь или сохранять историю для отмены (Undo).Command (Команда)

Резюме:

  • Если задача касается создания объекта — стоит выбрать паттерн в группе Порождающих (Singleton, Factory, Builder).
  • Если нужно связать несовместимые части или упростить структуру — стоит выбрать паттерн в группе Структурные (Adapter, Facade, Decorator).
  • Если нужно настроить взаимодействие и логику работы — стоит выбрать Поведенческие (Strategy, Observer, State).

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить