- Saved searches
- Use saved searches to filter your results more quickly
- faif/python-patterns
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Паттерны программирования python примеры
- Порождающие шаблоны проектирования
- Струкурные шаблоны проектирования
- Поведенческие шаблоны проектирования
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
A collection of design patterns/idioms in Python
faif/python-patterns
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Pass the `move` object to the `do_action()` method
Git stats
Files
Failed to load latest commit information.
README.md
A collection of design patterns and idioms in Python.
Creational Patterns:
Pattern | Description |
---|---|
abstract_factory | use a generic function with specific factories |
borg | a singleton with shared-state among instances |
builder | instead of using multiple constructors, builder object receives parameters and returns constructed objects |
factory | delegate a specialized function/method to create instances |
lazy_evaluation | lazily-evaluated property pattern in Python |
pool | preinstantiate and maintain a group of instances of the same type |
prototype | use a factory and clones of a prototype for new instances (if instantiation is expensive) |
Structural Patterns:
Pattern | Description |
---|---|
3-tier | databusiness logicpresentation separation (strict relationships) |
adapter | adapt one interface to another using a white-list |
bridge | a client-provider middleman to soften interface changes |
composite | lets clients treat individual objects and compositions uniformly |
decorator | wrap functionality with other functionality in order to affect outputs |
facade | use one class as an API to a number of others |
flyweight | transparently reuse existing instances of objects with similar/identical state |
front_controller | single handler requests coming to the application |
mvc | modelviewcontroller (non-strict relationships) |
proxy | an object funnels operations to something else |
Behavioral Patterns:
Pattern | Description |
---|---|
chain_of_responsibility | apply a chain of successive handlers to try and process the data |
catalog | general methods will call different specialized methods based on construction parameter |
chaining_method | continue callback next object method |
command | bundle a command and arguments to call later |
iterator | traverse a container and access the container’s elements |
iterator (alt. impl.) | traverse a container and access the container’s elements |
mediator | an object that knows how to connect other objects and act as a proxy |
memento | generate an opaque token that can be used to go back to a previous state |
observer | provide a callback for notification of events/changes to data |
publish_subscribe | a source syndicates events/data to 0+ registered listeners |
registry | keep track of all subclasses of a given class |
specification | business rules can be recombined by chaining the business rules together using boolean logic |
state | logic is organized into a discrete number of potential states and the next state that can be transitioned to |
strategy | selectable operations over the same data |
template | an object imposes a structure but takes pluggable components |
visitor | invoke a callback for all items of a collection |
Design for Testability Patterns:
Pattern | Description |
---|---|
dependency_injection | 3 variants of dependency injection |
Fundamental Patterns:
Pattern | Description |
---|---|
delegation_pattern | an object handles a request by delegating to a second object (the delegate) |
Pattern | Description |
---|---|
blackboard | architectural model, assemble different sub-system knowledge to build a solution, AI approach — non gang of four pattern |
graph_search | graphing algorithms — non gang of four pattern |
hsm | hierarchical state machine — non gang of four pattern |
Паттерны программирования python примеры
- Python — Обзор
- Основы синтаксиса Python
- Операторы в Python
- Типы данных в Python
- Условные конструкторы в Python
- Циклы в Python
- Функции в Python
- Функциональное программирование в Python
- ООП в Python
- Модули в Python
- Работа с файлами в Python
- Обработка исключительных ситуаций в Python
Паттерны проектирования это готовые эффективные решения для задач, которые часто встречаются в практике программиста. Это шаблон решения, по которому вы сможете решить возникшую проблему, внеся небольшие частные изменения в существующий паттерн.
Например, если мы производим автомобили, нам незачем каждый раз изобретать колесо или топливную систему, достаточно посмотреть, как они реализованы в других автомобилях и адаптивать их под свои нужды. Шаблоны проектирования не зависят от языка программирования, соответственно любой из них может быть реализован не только в Python, но и в любом другом языке программирования.
Обычно выделяют следующие группы шаблонов проектирования:
Порождающие шаблоны проектирования
Порождающие шаблоны проектирования связаны с механизмом создания новых объектов. Они призваны обеспечить ситуативную гибкость при создании объекта. Возвращаясь к примеру с машинами, сделать так, чтобы нам не нужно было строить новый завод каждый раз, когда мы хотим выпустить новую модель, вместо этого мы слегка видоизменим уже существующие процессы.
К порождающим шаблонам относятся.
Абстрактная фабрика | Abstract Factory | Позволяет создавать семейства взаимосвязанных или взаимозависимых объектов, без указания их конкретных классов. |
Строитель | Builder | Интерфейс для пошагового создания сложных объектов. |
Фабричный метод | Factory Method | Общий интерфейс для создания объектов в суперклассе, позволяющий подклассам определять тип создаваемого объекта. |
Объектный пул | Object Pool | Позволяет использовать уже созданный объект вместо создания нового, в ситуации, когда создание нового объекта требует большого количества ресурсов. |
Прототип | Prototype | Позволяет копировать объекты без необходимости учитывать особенности их реализации. |
Одиночка | Singleton | Гарантирует, что у класса есть только один экземпляр и предоставляет глобальную точку доступа к нему. |
Отложенная инициализация | Lazy initialization | Создание объекта, непосредственно перед его использованием. |
Мультитон | Multiton | Шаблон позволяющий создавать несколько одиночек (Singleton), доступ и управление которыми производится через ассоциативную таблицу, например словарь. |
Струкурные шаблоны проектирования
Структурные шаблоны проектирования определяют метод сборки объектов и классов в более сложные структуры, сохраняя при этом гибкость и эффективность. Для машины это будут перечень деталей, схемы и порядок сборки автомобиля.
К структурным шаблонам относятся.
Адаптер | Adapter | Создание объекта-посредника, который позволит взаимодействовать двум несовместимым объектам. |
Мост | Bridge | Разделяет класс на отдельные части: внешнюю абстракцию и внутреннюю реализацию. |
Компоновщик | Composite | Идея состоит в том, что группа объектов (контейнер) и сам объект (содержимое контейнера) обладают тем же набором свойств, что позволяет работать с группой как с целым объектом. |
Декоратор | Decorator | Добавляет, убирает или изменяет поведение декорированного объекта. |
Фасад | Facade | Обертка сложной системы, модуля, пакета в простой интерфейс. |
Приспособленец | Flyweight | Использование совместных ресурсов для похожих объектов, вместо выделения ресурсов для каждого объекта по отдельности. |
Прокси | Proxy | Создание объекта-подложки для реального объекта, чтобы контролировать обращения к нему, изменять или перенаправлять их. |
Поведенческие шаблоны проектирования
Поведенческие шаблоны определяют взаимодействие между классами и объектами, их обязанностями и алгоритмы поведения. На автозаводе это будут логистика и распределение обязанностей, построение коммуникации между разными департаментами и отделами.
К поведенческим шаблонам относят.
Цепочка обязанностей | Chain of responsibility | Последовательная передача запросов по списку объектов, которые эти запросы обрабатывают и/или передают дальше по цепочке. |
Итератор | Iterator | Позволяет последовательно получать объекты из контейнера, не раскрывая особенности реализации контейнера. В Python доступен на встроенном уровне. |
Команда | Command | Добавляет слой абстракции между действием и объектом, который это действие вызывает, например, кнопка и действие, которое выполняется при нажатии на эту кнопку. |
Посредник | Mediator | Создание такой структуры, в которой объекты не общаются друг с другом, а используют для этого объект-посредник. |
Хранитель | Memento | Сохраняет состояние объекта на определенный момент для того, чтобы при необходимости к нему можно было вернуться. |
Null Object | Null Object | Объект который может использоваться в случае отсутствия нужного объекта или объект по умолчанию. |
Наблюдатель | Observer | Объект «наблюдающий» за состоянием других объектов, информирующий систему / пользователя про изменения состояния наблюдаемого объекта, например пуш-извещения. |
Состояние | State | Позволяет изменять поведение объекта в зависимости от его состояния. |
Стратегия | Strategy | Позволяет объединить несколько алгоритмов в группу. Порядок применения алгоритмов может изменяться, благодаря чему достигается гибкость всей системы. |
Шаблонный метод | Template method | Создание базовых методов и алгоритма их применения в абстрактном родительском классе с тем, чтобы определить конкретные методы в дочерних классах. |
Посетитель | Visitor | Шаблон, позволяющий выполнять операции над другими объектами, без необходимости изменять эти объекты. |
Правильное применение шаблонов проектирования может в значительной мере упростить разработку программы и ее дальнейшую поддержку и расширение. В то же время, бездумное использование паттернов проектирования лишь без надобности усложнит и перегрузит созданную систему. Опыт эффективного использования того или иного шаблона приходит лишь со временем, так что не бойтесь практиковаться и эксперементировать.