In software engineering, design patterns are standard solutions to common software design problems.
Each pattern describes a problem that occurs over and over again and then provides a solution which you can use in many different scenarios.
As described in design pattern reference book Design Patterns - Elements of Reusable Object-Oriented Software, design patterns can be classified in three categories: Creational, Structural and Behavioral patterns.
Creational design patterns abstract the instantiation process.
They deal with object creation mechanisms, while hiding the creation logic. This provides us flexibility for creating objects based on different use cases.
Creational patterns implemented here are:
- Factory Method
- Abstract Factory (in progress)
- Builder
- Prototype (in progress)
- Singleton
Structural patterns are concerned with how classes and objects are composed to form larger structures. Rather than composing interfaces or implemetations, these patterns describe ways to compose objects to realize new functionality.
The ability to change the composition at runtime, adds flexibility to object composition.
Structural patterns implemented here are:
Behavioral patterns are concerned with algorithms and the assignment of responsibilities between objects.
In simple words, they describe how different objects and classes send messages to each other to make things happen and how the steps of a task are divided among different objects.
Behavioral patterns implemented here are:
Design Patterns: Elements of Reusable Object-Oriented Software - Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm
Head first Design Patterns - Eric Freeman, Elisabeth Freeman, Kathy Sierra and Bert Bates
Wikipedia (https://en.wikipedia.org/wiki/Software_design_pattern)