Este repositório contém implementações dos principais padrões de projeto em Java. Cada diretório dentro deste repositório é dedicado a um padrão de projeto específico, exemplificando como ele pode ser aplicado no desenvolvimento de software.
Este projeto serve como uma coleção de exemplos práticos e explicações sobre os principais padrões de projeto no contexto de Java. A ideia é fornecer soluções reutilizáveis, organizadas e bem documentadas para problemas comuns de design de software.
Abaixo estão os principais padrões de projeto implementados neste repositório:
- Singleton - Garantir que uma classe tenha apenas uma instância e fornecer um ponto global de acesso.
- Factory Method - Definir uma interface para criar um objeto, mas permitir que subclasses decidam qual classe instanciar.
- Abstract Factory - Interface para criar famílias de objetos relacionados, sem especificar suas classes concretas.
- Builder - Separar a construção de um objeto complexo de sua representação, permitindo a criação de diferentes representações.
- Prototype - Criar objetos clonando-os a partir de protótipos em vez de criar outro objeto a partir do zero.
- Adapter - Converter a interface de uma classe em outra que os clientes esperam.
- Bridge - Separar a abstração da implementação, permitindo que ambas evoluam independentemente.
- Composite - Compor objetos em estruturas de árvore para representar hierarquias parte-todo.
- Decorator - Anexar responsabilidades adicionais a um objeto dinamicamente.
- Facade - Fornecer uma interface unificada para um conjunto de interfaces em um subsistema.
- Flyweight - Usar o compartilhamento para suportar grandes quantidades de objetos de forma eficiente.
- Proxy - Fornecer um objeto substituto que controla o acesso a outro objeto.
- Chain of Responsibility - Evitar o acoplamento do remetente de uma solicitação ao seu receptor, permitindo que mais de um objeto tenha a oportunidade de tratar a solicitação.
- Command - Encapsular uma solicitação como um objeto, permitindo que os parâmetros sejam passados, armazenados e manipulados.
- Iterator - Fornecer uma maneira de acessar os elementos de um objeto agregado sequencialmente, sem expor a sua representação subjacente.
- Mediator - Definir um objeto que centraliza a comunicação entre objetos, evitando o acoplamento direto entre eles.
- Memento - Capturar e externalizar o estado interno de um objeto sem violar o encapsulamento, permitindo que o objeto seja restaurado posteriormente.
- Observer - Definir uma dependência um-para-muitos entre objetos, de forma que, quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente.
- State - Permitir que um objeto altere o seu comportamento quando o seu estado interno mudar.
- Strategy - Definir uma família de algoritmos, encapsular cada um deles e torná-los intercambiáveis.
- Template Method - Definir o esqueleto de um algoritmo, deixando alguns passos a serem implementados pelas subclasses.