Design Partners Flashcards
Quais as 3 classificações dos padrões de projeto?
- Criação: objetivo de abstrair a instanciação de objetos.
- Estruturais: organizar a estrutura das classes e os relacionamentos entre classes e objetos.
- Comportamentais: atuam diretamente na delegação de responsabilidades, definindo como os objetos devem se comportar e se comunicar.
Quais os padrões de criação?
Abstract Factory - Um método Factory é um método que fabrica objetos de um tipo particular; Um objeto Factory é um objeto que encapsula métodos Factory.
Builder - Separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações.
Factory Method - É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos.
Prototype - O padrão Prototype fornece uma outra maneira de se construir objetos de tipos arbitrários.
Singleton - Garante que para uma classe específica só possa existir uma única instância, a qual é acessível de forma global e uniforme.
Quais os padrões estruturais?
Adapter - Permite que dois objetos se comuniquem mesmo que tenham interfaces incompatíveis.
Bridge - Desacopla a interface da implementação ; Ocultação de detalhes de implementação dos clientes.
Composite - lida com uma estrutura de elementos agrupada hierarquicamente (não como meras coleções).
Decorator - Atribui responsabilidade adicionais a um objeto dinamicamente. O Decorator fornece uma alternativa flexível a subclasses para a extensão da funcionalidade.
Facade - Interface unificada para um subsistema ; Torna o subsistema mais fácil de usar.
Flyweight - Usa compartilhamento para dar suporte a vários objetos de forma eficiente.
Proxy - Fornece um objeto representante ou procurador de outro objeto para controlar o acesso ao mesmo.
O que são anti-patterns?
São soluções recorrentes para problemas comuns que, na prática, causam mais problemas do que resolvem. Ou seja, são más práticas que podem parecer boas ideias no início, mas que acabam gerando código confuso, difícil de manter ou com baixo desempenho.
Exemplos de anti-patterns
<ul>
<li><strong>God Object (Objeto Deus)</strong>
<ul>
<li>Problema: Criar uma classe que faz "tudo" dentro do sistema, acumulando muitas responsabilidades.</li>
</ul>
</li>
<li><strong>Spaghetti Code (Código Espaguete)</strong>
<ul>
<li>Problema: Código sem organização, com lógica confusa e interdependente.</li>
</ul>
</li>
<li><strong>Copy-Paste Programming</strong>
<ul>
<li>Problema: Copiar e colar código repetidamente sem refatorar.</li>
</ul>
</li>
<li><strong>Cargo Cult Programming</strong>
<ul>
<li>Problema: Implementar padrões ou tecnologias sem entender o motivo, apenas porque são populares.</li>
</ul>
</li>
<li><strong>Golden Hammer (Martelo de Ouro)</strong>
<ul>
<li>Problema: Tentar resolver todo tipo de problema com a mesma ferramenta ou tecnologia.</li>
</ul>
</li>
<li><strong>Hardcoded Values</strong>
<ul>
<li>Uso de valores fixos dentro do código em vez de variáveis configuráveis.</li>
</ul>
</li>
<li><strong>Magic Number</strong>
<ul>
<li>Uso de números aleatórios no código sem explicação.</li>
</ul>
</li>
</ul>
Quais os padrões comportamentais?
<ul>
<li><strong>Chain of Responsability</strong>
<ul>
<li>Evita o acoplamento do remetente de uma solicitação aoseu receptor. Encadeia os objetos receptores, passando asolicitação ao longo da cadeia até que um objeto a trate.</li>
</ul>
</li>
<li><strong>Command</strong>
<ul>
<li>Encapsula uma requisição como um objeto, deixando-o,dessa forma, parametrizar os clientes com diferentesrequisições.</li>
</ul>
</li>
<li><strong>Iterator</strong>
<ul>
<li>Fornece um meio de acessar sequencialmente oselementos de um objeto agregado sem expor a suarepresentação subjacente.</li>
</ul>
</li>
<li><strong>Mediator</strong>
<ul>
<li>Define um objeto que encapsula a forma como umconjunto de objetos interage. Promove o acoplamentofraco ao evitar que os objetos se refiram explicitamenteuns aos outros.</li>
</ul>
</li>
<li><strong>Memento</strong>
<ul>
<li>Define uma dependência entre objetos de forma quequando um objeto muda de estado, todos os seusdependentes são notificados e atualizadosautomaticamente.</li>
</ul>
</li>
<li><strong>Observer</strong>
<ul>
<li>Define uma dependência entre objetos de forma quequando um objeto muda de estado, todos os seusdependentes são notificados e atualizadosautomaticamente.</li>
</ul>
</li>
<li><strong>State</strong>
<ul>
<li>Permite que um objeto mude o seu comportamentoquando o seu estado interno mudar. O objeto parecerá termudado de classe.</li>
</ul>
</li>
<li><strong>Strategy</strong>
<ul>
<li>Define uma família de algoritmos, encapsula cada um, efaz deles intercambiáveis.</li>
</ul>
</li>
<li><strong>Visitor</strong>
<ul>
<li>Representa uma operação a ser executada sobre oselementos da estrutura de um objeto. Permite definir umanova operação sem mudar as classes dos elementos sobreos quais opera.</li>
</ul>
</li>
</ul>