Паттерны программирования 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 Шаблон, позволяющий выполнять операции над другими объектами, без необходимости изменять эти объекты.

Правильное применение шаблонов проектирования может в значительной мере упростить разработку программы и ее дальнейшую поддержку и расширение. В то же время, бездумное использование паттернов проектирования лишь без надобности усложнит и перегрузит созданную систему. Опыт эффективного использования того или иного шаблона приходит лишь со временем, так что не бойтесь практиковаться и эксперементировать.

Источник

Читайте также:  Ошибка программирования реквизита 1009 атол 1с розница
Оцените статью