Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zoranpandovski/design-patterns

:briefcase: Design patterns written in different programming languages :triangular_ruler:
https://github.com/zoranpandovski/design-patterns

cpp csharp design-pattern design-patterns gang-of-four good-practices hacktoberfest hacktoberfest2020 java javascript php python

Last synced: 11 days ago
JSON representation

:briefcase: Design patterns written in different programming languages :triangular_ruler:

Awesome Lists containing this project

README

        


Design patterns




[![BCH compliance](https://bettercodehub.com/edge/badge/ZoranPandovski/design-patterns?branch=master)](https://bettercodehub.com/)
[![Say Thanks!](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/ZoranPandovski)
[![Open Source Love](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/ZoranPandovski)
[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/ZoranPandovski/design-patterns/issues)

# Design patterns [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Design%20Patterns&url=https://github.com/ZoranPandovski/design-patterns&via=design-patterns&hashtags=design,design-patterns,python,java,c,cpp,php,javascript)

In software engineering, a software design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. It is a description or template used to know how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that a programmer can use to solve common problems while designing an application or system.
Design patterns may be viewed as a structured approach to computer programming intermediate between the levels of a programming paradigm and a concrete algorithm.

## List of implementations

* [Behavioral](Behavioral)
* [Callback](Behavioral/Callback)
* [Chain Of Responsibility](Behavioral/ChainOfResponsability)
* [Command](Behavioral/Command)
* [Delegation](Behavioral/Delegation)
* [Iterator](Behavioral/Iterator)
* [Null Object](Behavioral/NullObject)
* [Observer](Behavioral/Observer)
* [State](Behavioral/State)
* [Strategy](Behavioral/Strategy)
* [Template Method](Behavioral/TemplateMethod)
* [Visitor](Behavioral/Visitor)
* [Interpreter](Behavioral/Interpreter)
* [Mediator](Behavioral/Mediator)
* [Concurrency](Concurrency)
* [Active Object](Concurrency/Active%20Object)
* [Balking Pattern](Concurrency/Balking%20Pattern)
* [Concurrent Server](Concurrency/Concurrent%20Server)
* [Fan Out](Concurrency/Fan%20Out)
* [Guarded Suspension](Concurrency/Guarded%20Suspension)
* [Mutext](Concurrency/Mutex)
* [Semaphores](Concurrency/Semaphores)
* [Observer](Concurrency/Observer)
* [Thread Pool](Concurrency/ThreadPool)
* [Creational](Creational)
* [Abstract Factory](Creational/Abstract%20Factory)
* [Builder](Creational/Builder)
* [Dependency Injection](Creational/Dependency%20Injection)
* [Factory](Creational/Factory)
* [Lazy Initialization](Creational/LazyInitialization)
* [Method Chaining](Creational/Method%20Chaining)
* [Prototype](Creational/Prototype)
* [Singleton](Creational/Singleton)
* [Value Object](Creational/Value%20Object)
* [Structural](Structural)
* [Adapter](Structural/Adapter)
* [Bridge](Structural/Bridge)
* [Builder](Structural/Builder)
* [Composite](Structural/Composite)
* [Decorator](Structural/Decorator)
* [Filter](Structural/Filter)
* [Flyweight](Structural/Flyweight)
* [Facade](Structural/Facade)
* [Repository](Structural/Repository)
* [PrivateClass](Structural/PrivateClass)
* [Proxy](Structural/Proxy)
* [TransactionalStack](Structural/TransactionalStack)

## Contribution
* Contributions are always welcome. Language doesn't matter. Just make sure you're implementing design pattern.
* PRs are welcome. To begin developing, follow the structure:

> category/design pattern name/language-name/file_name.extension

e.g

> Creational/Abstract factory/python/abstract_factory.py
* Don't forget to add README with explanation how pattern works, when to use and common usage of the pattern.
* Adding image with UML diagram for design pattern would be very helpful.

## Resources

Curated list of resources dealing with design patterns.

* Books
* [Head First Design Patterns 2nd Edition](https://www.amazon.com/Head-First-Design-Patterns-Object-Oriented/dp/149207800X) [[Python](https://github.com/rebuild-123/Python-Head-First-Design-Patterns)] [[Java](https://github.com/bethrobson/Head-First-Design-Patterns)]
* [Elements of Reusable Object-Oriented Software](https://www.amazon.com/gp/product/0201633612/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0201633612&linkCode=as2&tag=anjabl-20)
* [Design Patterns Explained: A New Perspective on Object Oriented Design](https://www.amazon.com/dp/0321247140/?tag=myga0ba-20)
* [Patterns of Enterprise Application Architecture](https://www.amazon.com/dp/0321127420/?tag=myga0ba-20)
* Free e-books
* [Design Pattern in C++](http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf)
* [Design Pattern in Javascript](http://sd.blackball.lv/library/Mastering_JavaScript_Design_Patterns_(2014).pdf)
* Sites
* [Design patterns](http://www.oodesign.com/)
* [Geeks for geeks design patterns](http://www.geeksforgeeks.org/software-design-patterns/)
* [Source making Design patterns](https://sourcemaking.com/design_patterns)
* [Java Desgin Pattens Example tutorial](https://www.journaldev.com/1827/java-design-patterns-example-tutorial)
* [Learn about Design Patterns](https://www.scaler.com/topics/design-patterns/)
* [Design Patterns - refactoring.guru](https://refactoring.guru/design-patterns)
* Online classes (Free)
* [Design Patterns - Coursera](https://www.coursera.org/courses?query=design%20patterns)
* [Hackr.io list ](https://hackr.io/tutorials/learn-software-design-patterns)

## License

[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](https://creativecommons.org/publicdomain/zero/1.0/)

To the extent possible under law, [Zoran Pandovski](https://github.com/ZoranPandovski/) has waived all copyright and related or neighboring rights to this work.