There are three kinds of software design patterns (well-known as GOF patterns that have become a de facto standard in the programmers' world): creational, structural and behavioral patterns. Concurrency patterns won't be considered, because they aren't a part of GoF.
You could find out about all of them here, in this repository.
-
Creational
- Singleton - to allow a class to create one instance
- Simple Factory * [class diagram] - the factory based on concrete implementations
- Factory Method [class diagram] - to allow a class to defer instantiation to its subclasses
- Abstract Factory [class diagram] - to create a families of related objects without having to depend on their concrete classes
- Builder [class diagram] - to allow an object building by the parts
- Prototype [class diagram] - to allow a creation of objects based on the currently existing object
-
Structural
- Adapter - to allow adapting different interfaces to each other without modifying their source code
- Facade - to provide a simpler interface to interact with another interface or subsystem
- Decorator - to expand interface functionality dynamically
- Composite [class diagram] - to allow presenting a group of an object as a single object without a difference of usage
- Bridge [class diagram] - to separate an implementation from an abstraction
- Flyweight [class diagram] - to allow to reduce memory costs using already created objects
- Proxy [class diagram] - to control an access to the origin resource
-
Behavioral
The patterns marked by * don't relate to GoF patterns. They are simply a part of good practice of software development.