Design patterns are typical solutions to common problems in software design. Each pattern is like a blueprint that you can customize to solve a particular design problem in your code.
Patterns are a toolkit of solutions to common problems in software design. They define a common language that helps your team communicate more efficiently.
Design patterns differ by their complexity, level of detail and scale of applicability. In addition, they can be categorized by their intent and divided into three groups.
Strategy is a behavioral design pattern that lets you define a family of algorithms, put each of them into a separate class, and make their objects interchangeable.
Builder is a creational design pattern that lets you construct complex objects step by step. The pattern allows you to produce different types and representations of an object using the same construction code.
Prototype is a creational design pattern that lets you copy existing objects without making your code dependent on their classes.
Singleton is a creational design pattern that lets you ensure that a class has only one instance, while providing a global access point to this instance.
Adapter is a structural design pattern that allows objects with incompatible interfaces to collaborate.
Decorator is a structural design pattern that lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.