Коллекция шаблонов проектирования и идиом на Python.
Помните, что у каждого шаблона есть свои компромиссы. И вам нужно уделять больше внимания тому, почему вы выбираете определенный шаблон, а не тому, как его реализовать.
Творческие шаблоны :
Шаблон | Описание |
---|---|
абстрактная_фабрика | используйте общую функцию с конкретными фабриками |
борг | синглтон с общим состоянием среди экземпляров |
строитель | вместо использования нескольких конструкторов объект-строитель получает параметры и возвращает построенные объекты. |
фабрика | делегировать специализированную функцию/метод для создания экземпляров |
ленивая_оценка | шаблон свойств с ленивой оценкой в Python |
бассейн | предварительно создавать и поддерживать группу экземпляров одного типа |
прототип | использовать фабрику и клоны прототипа для новых экземпляров (если создание экземпляра дорогое) |
Структурные узоры :
Шаблон | Описание |
---|---|
3-х уровневый | данные<->бизнес-логика<->разделение представления (строгие отношения) |
адаптер | адаптировать один интерфейс к другому с помощью белого списка |
мост | посредник клиент-провайдер для смягчения изменений интерфейса |
композитный | позволяет клиентам единообразно обращаться с отдельными объектами и композициями |
декоратор | обернуть функциональность другими функциями, чтобы повлиять на выходные данные |
фасад | использовать один класс в качестве API для ряда других |
наилегчайший вес | прозрачно повторно использовать существующие экземпляры объектов с похожим/идентичным состоянием |
front_controller | запросы с одним обработчиком, поступающие в приложение |
MVC | модель<->представление<->контроллер (нестрогие отношения) |
прокси | объект направляет операции на что-то другое |
Поведенческие модели :
Шаблон | Описание |
---|---|
цепочка_ответственности | применить цепочку последовательных обработчиков, чтобы попытаться обработать данные |
каталог | общие методы будут вызывать различные специализированные методы в зависимости от параметра конструкции |
цепочка_метод | продолжить обратный вызов метода следующего объекта |
команда | объединить команду и аргументы для вызова позже |
итератор | перемещаться по контейнеру и получать доступ к его элементам |
итератор (альт. подразумеваемый) | перемещаться по контейнеру и получать доступ к его элементам |
посредник | объект, который умеет соединять другие объекты и действовать как прокси |
сувенир | сгенерировать непрозрачный токен, который можно использовать для возврата в предыдущее состояние |
наблюдатель | обеспечить обратный вызов для уведомления о событиях/изменениях данных |
публикация_подписка | источник объединяет события/данные с 0+ зарегистрированными слушателями |
реестр | отслеживать все подклассы данного класса |
спецификация | бизнес-правила можно перекомбинировать, объединив бизнес-правила вместе с использованием логической логики. |
состояние | логика организована в дискретное число потенциальных состояний и следующее состояние, в которое можно перейти. |
стратегия | выбираемые операции над одними и теми же данными |
шаблон | объект накладывает структуру, но принимает подключаемые компоненты |
посетитель | вызвать обратный вызов для всех элементов коллекции |
Проектирование шаблонов тестируемости :
Шаблон | Описание |
---|---|
зависимость_инъекция | 3 варианта внедрения зависимостей |
Основные шаблоны :
Шаблон | Описание |
---|---|
делегирование_шаблон | объект обрабатывает запрос, делегируя его второму объекту (делегату) |
Другие :
Шаблон | Описание |
---|---|
доска | архитектурная модель, сбор знаний о различных подсистемах для построения решения, подход ИИ - шаблон без «банды четырех» |
граф_поиск | графические алгоритмы - шаблон без «банды четырех» |
хсм | иерархический конечный автомат - шаблон без «банды четырех» |
Шаблоны проектирования в Python Питера Ульриха
Себастьян Бучински - Почему вам не нужны шаблоны проектирования в Python?
Вам это не нужно!
Подключаемые библиотеки с помощью шаблонов проектирования
При добавлении или изменении реализации ознакомьтесь со следующими рекомендациями:
Добавьте описание уровня модуля в виде строки документации со ссылками на соответствующие ссылки или другую полезную информацию.
Добавьте раздел «Примеры в экосистеме Python», если вы их знаете. Он показывает, как шаблоны могут быть применены к реальным проблемам.
В файле фасада есть хороший пример подробного описания, но иногда бывает достаточно и более короткого описания, как в файле template.py.
Чтобы увидеть версии некоторых шаблонов, совместимые с Python 2, воспользуйтесь тегом устаревших версий.
Когда все остальное будет сделано - обновите соответствующую часть README.
Пожалуйста, запустите следующее перед отправкой патча
black .
Это анализирует ваш код.Тогда либо:
tox
или tox -e ci37
Запускает модульные тесты. дополнительную информацию см. в tox.ini../lint.sh
Этот сценарий проверит и протестирует ваш код. Этот сценарий отражает действия конвейера CI. Вы также можете запускать команды flake8
или pytest
вручную. Примеры можно найти в tox.ini
.
Вы можете сортировать проблемы и запросы на включение, которые могут включать в себя воспроизведение отчетов об ошибках или запрос важной информации, такой как номера версий или инструкции по воспроизведению. Если вы хотите начать сортировку проблем, один из простых способов начать — подписаться на шаблоны Python на CodeTriage.
Ребята из Mutable.ai создали ИИ-помощника, который умеет работать с кодовой базой. Попробуйте