Список паттернов проектирования и идиом в Python.
Порождающие паттерны:
Паттерн | Описание |
---|---|
abstract_factory | использует обобщенную функцию с конкретными фабриками |
borg | синглтон с общим состоянием между экземплярами |
builder | вместо использования нескольких конструкторов, объект-строитель принимает параметры и возвращает созданные объекты |
factory | делегирует специализированную функцию/метод для создания экземпляров |
lazy_evaluation | шаблон "ленивого вычисления" свойств в Python |
pool | предварительно создает и поддерживает группу экземпляров одного типа |
prototype | использует фабрику и клонирование прототипа для создания новых экземпляров (если создание дорого) |
Структурные паттерны:
Паттерн | Описание |
---|---|
3-tier | разделение данных <-> бизнес-логика <-> представление (строгие отношения) |
adapter | адаптирует один интерфейс к другому с использованием белого списка |
bridge | посредник между клиентом и поставщиком для смягчения изменений интерфейса |
composite | позволяет клиентам обращаться к отдельным объектам и композициям одинаково |
decorator | оборачивает функциональность другой функциональностью для изменения результатов |
facade | использует один класс в качестве API к нескольким другим |
flyweight | прозрачно повторно использует существующие экземпляры объектов с похожим/одинаковым состоянием |
front_controller | один обработчик запросов, поступающих в приложение |
mvc | модель <-> представление <-> контроллер (нестрогие отношения) |
proxy | объект направляет операции на что-то другое |
Поведенческие паттерны:
Паттерн | Описание |
---|---|
chain_of_responsibility | применяет цепочку последовательных обработчиков для обработки данных |
catalog | общие методы будут вызывать различные специализированные методы на основе параметра конструкции |
chaining_method | продолжает обратный вызов следующего метода объекта |
command | объединяет команду и аргументы для последующего вызова |
iterator | обход контейнера и доступ к элементам контейнера |
iterator (альтернативная реализация) | обход контейнера и доступ к элементам контейнера |
mediator | объект, который умеет соединять другие объекты и действовать как прокси |
memento | создает непрозрачный маркер, который можно использовать для возврата к предыдущему состоянию |
observer | предоставляет обратный вызов для уведомления о событиях/изменениях данных |
publish_subscribe | источник рассылает события/данные 0+ зарегистрированным слушателям |
registry | отслеживает все подклассы данного класса |
specification | бизнес-правила можно повторно комбинировать, объединяя их логическими операциями |
state | логика организована в нескольких потенциальных состояниях и следующем состоянии, в которое можно перейти |
strategy | выборочные операции над теми же данными |
template | объект налагает структуру, но принимает компоненты как плагины |
visitor | вызывает обратный вызов для всех элементов коллекции |
Паттерны проектирования для обеспечения тестируемости:
Паттерн | Описание |
---|---|
dependency_injection | 3 варианта внедрения зависимостей |
Основные паттерны:
Паттерн | Описание |
---|---|
delegation_pattern | объект обрабатывает запрос, делегируя его второму объекту (делегату) |
Другие паттерны:
Паттерн | Описание |
---|---|
blackboard | архитектурная модель, сбор различных знаний подсистем для создания решения, подход ИИ - не паттерн "банда четырех" |
graph_search | алгоритмы работы с графами - не паттерн "банда четырех" |
hsm | иерархическая конечная автоматная машина - не паттерн "банда четырех" |
Паттерны проектирования на Python от Петера Ульриха
Себастьян Бучински - Почему вам не нужны паттерны проектирования в Python?