-
Notifications
You must be signed in to change notification settings - Fork 0
Design Patterns
They focus on the object instantiation process, abstracting the creation process to make it more flexible and independent of the concrete application of the classes.
| PATTERN | DESCRIPTION |
|---|---|
| Singleton | Garante que uma classe tenha uma única instância e fornece um ponto global de acesso a ela. |
| Factory Method | Define uma interface para criar um objeto, mas permite às subclasses decidir qual classe instanciar. |
| Abstract Factory | Fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. |
| Builder | Separa a construção de um objeto complexo da sua representação, permitindo a mesma construção com diferentes representações. |
| Prototype | Cria novos objetos copiando um protótipo existente. |
Tratam da composição de classes e objetos para formar estruturas maiores e mais eficientes.
- Adapter (Wrapper): Converte a interface de uma classe em outra esperada pelo cliente.
- Bridge: Separa uma abstração de sua implementação para que ambas possam variar independentemente.
- Composite: Compõe objetos em estruturas de árvore para representar hierarquias parte-todo.
- Decorator: Adiciona responsabilidades a um objeto dinamicamente.
- Facade: Fornece uma interface unificada para um conjunto de interfaces em um subsistema.
- Flyweight: Usa o compartilhamento para suportar grandes quantidades de objetos de forma eficiente.
- Proxy: Fornece um substituto ou representante de outro objeto para controlar o acesso a ele.
Lidam com a interação e responsabilidade entre objetos, promovendo a comunicação eficaz e desacoplada.
- Chain of Responsibility: Evita o acoplamento do remetente de uma solicitação ao seu receptor, passando a solicitação por uma cadeia de objetos.
- Command: Encapsula uma solicitação como um objeto, permitindo parametrizar clientes com diferentes solicitações.
- Interpreter: Define uma gramática para uma linguagem e interpreta frases dessa linguagem.
- Iterator: Fornece uma maneira de acessar os elementos de um agregado sequencialmente sem expor sua representação.
- Mediator: Define um objeto que encapsula como um conjunto de objetos interage.
- Memento: Captura e externaliza o estado interno de um objeto, sem violar o encapsulamento.
- Observer: Define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, seus dependentes são notificados.
- State: Permite que um objeto altere seu comportamento quando seu estado interno muda.
- Strategy: Define uma família de algoritmos, encapsula cada um e os torna intercambiáveis.
- Template Method: Define o esqueleto de um algoritmo em uma operação, deixando alguns passos para as subclasses.
- Visitor: Representa uma operação a ser realizada nos elementos de uma estrutura de objetos.
Tais padrões refletem uma forma de areté técnica — excelência no agir projetual — em que se manifesta a "phronesis" (sabedoria prática), conforme Aristóteles a concebe na Ética a Nicômaco. Não se trata de meras receitas, mas de formas exemplares que exigem discernimento para serem aplicadas adequadamente no contexto singular de um sistema.
Ademais, a aplicação de padrões de projeto também remete à noção de forma platônica, uma ideia ideal de solução que o programador visa implementar no mundo sensível do código. Como afirma Christopher Alexander, cuja obra inspirou o conceito de design patterns na engenharia de software: “cada padrão descreve um problema que ocorre repetidamente em nosso ambiente, e então descreve o núcleo da solução para esse problema, de tal forma que você pode usar essa solução um milhão de vezes, sem nunca fazê-lo da mesma maneira duas vezes.” (A Pattern Language, 1977).
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
- Alexander, C. (1977). A Pattern Language: Towns, Buildings, Construction. Oxford University Press.
- Freeman, E., Freeman, E., Sierra, K., & Bates, B. (2004). Head First Design Patterns. O'Reilly.