Design patterns are a fundamental part of software development, as they provide typical solutions to commonly recurring problems in software design. Rather than providing specific pieces of software, design patterns are merely concepts that can be used to handle recurring themes in an optimized way*. –* https://www.patterns.dev
🔍 What do you find here?
<aside> 👉 ❯ Creational: design patterns that deal with object creation mechanisms, trying to create objects in a manner suitable to the situation, Abstract Factory, Factory Method, Singleton, Builder e Prototype.
❯ Structural: design patterns that ease the design by identifying a simple way to realize relationships among entities, Proxy, Adapter, Facade, Decorator, Bridge, Composite e Flyweight.
❯ Behavioral: design patterns that identify common communication patterns among objects, Strategy, Observer, Template Method, Visitor, Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento e State.
Cool link: [<https://refactoring.guru/design-patterns>](<https://refactoring.guru/design-patterns>)
</aside>
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.
Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object.
Factory Method is a creational design pattern that provides an interface for creating objects in a superclass but allows subclasses to alter the type of objects that will be created.
Abstract Factory is a creational design pattern that lets you produce families of related objects without specifying their concrete classes.