All Projects → faif → Python Patterns

faif / Python Patterns

A collection of design patterns/idioms in Python

Programming Languages

python
139335 projects - #7 most used programming language
Makefile
30231 projects
shell
77523 projects

Projects that are alternatives of or similar to Python Patterns

Go Patterns
Curated list of Go design patterns, recipes and idioms
Stars: ✭ 17,827 (-40.32%)
Mutual labels:  design-patterns, idioms
Lld Parking Lot
Repository for low level design solution of parking lot
Stars: ✭ 27 (-99.91%)
Mutual labels:  design-patterns
Javamtp
《Java多线程编程实战指南(设计模式篇)》源码
Stars: ✭ 575 (-98.07%)
Mutual labels:  design-patterns
Ltupatternfactory
Lambda the ultimate Pattern Factory: FP, Haskell, Typeclassopedia vs Software Design Patterns
Stars: ✭ 735 (-97.54%)
Mutual labels:  design-patterns
Coordinator
Implementation of Coordinators app design pattern.
Stars: ✭ 616 (-97.94%)
Mutual labels:  design-patterns
Rails Handbook
Describing the development process used by the Infinum Rails Team.
Stars: ✭ 738 (-97.53%)
Mutual labels:  design-patterns
Entitas Csharp
Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity
Stars: ✭ 5,393 (-81.94%)
Mutual labels:  design-patterns
Ts Design Patterns
Design Patterns, written and explained using Typescript
Stars: ✭ 13 (-99.96%)
Mutual labels:  design-patterns
Javastudspringmvcweb
This is annotation based on Spring and Hibernate Version 4 project.
Stars: ✭ 24 (-99.92%)
Mutual labels:  design-patterns
Design Patterns Php
Design Pattern Examples in PHP
Stars: ✭ 682 (-97.72%)
Mutual labels:  design-patterns
Rest Api Design Guide
NBB's REST-ish API Design Guide
Stars: ✭ 643 (-97.85%)
Mutual labels:  design-patterns
Node.js design patterns second edition code
Code repository for Node.js Design Patterns Second Edition, published by Packt
Stars: ✭ 617 (-97.93%)
Mutual labels:  design-patterns
Di
DI: C++14 Dependency Injection Library
Stars: ✭ 756 (-97.47%)
Mutual labels:  design-patterns
Rude Java
Java Practice Projects. 以Java语言为主的各种项目实践,涵盖各个业务、各个功能,并附上高质量文章讲解,其中一些甚至可以单开一个仓库。让你再也不用寻找各种框架demo、项目脚手架。
Stars: ✭ 583 (-98.05%)
Mutual labels:  design-patterns
Jerryslide
Jerry's Knowledge repository - cut down on 2017-02-04 15:26PM
Stars: ✭ 12 (-99.96%)
Mutual labels:  design-patterns
Cp Ddd Framework
A lightweight flexible development framework for complex business architecture with full ecosystem!轻量级业务中台开发框架,中台架构的顶层设计和完整解决方案!
Stars: ✭ 566 (-98.11%)
Mutual labels:  design-patterns
Iosdesignpatternsamples
This is Github user search demo app which made by many variety of design patterns. You can compare differences in MVC, MVP, MVVM and Flux.
Stars: ✭ 622 (-97.92%)
Mutual labels:  design-patterns
Cpp Design Patterns
C++设计模式
Stars: ✭ 734 (-97.54%)
Mutual labels:  design-patterns
Russian
🇷🇺 translation [WIP]
Stars: ✭ 14 (-99.95%)
Mutual labels:  design-patterns
Wordpress Admin Style
Shows the WordPress admin styles on one page to help you to develop WordPress compliant
Stars: ✭ 871 (-97.08%)
Mutual labels:  design-patterns

python-patterns

A collection of design patterns and idioms in Python.

Current Patterns

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 data<->business logic<->presentation 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 model<->view<->controller (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)

Others:

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

Videos

Design Patterns in Python by Peter Ullrich

Sebastian Buczyński - Why you don't need design patterns in Python?

You Don't Need That!

Pluggable Libs Through Design Patterns

Contributing

When an implementation is added or modified, please review the following guidelines:

Output

All files with example patterns have ### OUTPUT ### section at the bottom (migration to OUTPUT = """...""" is in progress).

Run append_output.sh (e.g. ./append_output.sh borg.py) to generate/update it.

Docstrings

Add module level description in form of a docstring with links to corresponding references or other useful information.

Add "Examples in Python ecosystem" section if you know some. It shows how patterns could be applied to real-world problems.

facade.py has a good example of detailed description, but sometimes the shorter one as in template.py would suffice.

In some cases class-level docstring with doctest would also help (see adapter.py) but readable OUTPUT section is much better.

Python 2 compatibility

To see Python 2 compatible versions of some patterns please check-out the legacy tag.

Update README

When everything else is done - update corresponding part of README.

Travis CI

Please run tox or tox -e ci37 before submitting a patch to be sure your changes will pass CI.

You can also run flake8 or pytest commands manually. Examples can be found in tox.ini.

Contributing via issue triage Open Source Helpers

You can triage issues and pull requests which may include reproducing bug reports or asking for vital information, such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to subscribe to python-patterns on CodeTriage.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].