Padrões de Projetos Comportamentais
Tags: designpatterns
Published: 2023-07-26 16:02:07

##Resumo
Este artigo tem como propósito investigar os Padrões de Projeto Comportamentais, os quais podem ser aplicados em projetos de desenvolvimento de software. Tais padrões representam abordagens cientificamente fundamentadas para promover a implementação de códigos limpos, bem estruturados e de fácil compreensão. Além disso, abordaremos a relevância da reutilização de código como um dos principais objetivos decorrentes da adoção desses padrões. Demonstra-se que a aplicação de qualquer um desses padrões viabiliza a concepção de sistemas completos com maior eficiência, exigindo menos linhas de código e fomentando uma organização mais eficaz.

Palavras-chave: Orientação a Objetos, Padrões de Projeto, GoF

##Introdução
Cada profissional envolvido no desenvolvimento de softwares adota suas próprias abordagens para organizar e alcançar a finalização do produto desejado. No entanto, por trás desse processo, há uma relevante convenção respaldada pela comunidade internacional, a qual fornece diretrizes valiosas sobre a construção adequada de cada sistema. Ao acatar essas recomendações e adotar boas práticas, alcançaremos um nível de desenvolvimento em que nossos códigos se tornarão altamente reutilizáveis e facilmente compreensíveis.

O principal objetivo da utilização desses padrões é, justamente, promover a organização em nossos projetos. Visto que nem sempre atuamos de forma isolada, uma excelente comunicação e organização são fundamentais para o sucesso de projetos em equipe. Ao adotar essas práticas, facilitamos a colaboração, possibilitando um ambiente propício para uma construção conjunta eficiente.

Manutenções e adições são temidas por inúmeros desenvolvedores, uma vez que algo pequeno como a adição de um novo objeto ou edição do mesmo se torne um grande problema no futuro. Uma vez que será necessário mexer em dezenas de outros arquivos para algo que poderia ser feito com maior produtividade se houvessem boas práticas inseridas no projeto.

##Os Padrões
Existem diversas opções de padrões que podem e devem ser adotados pelos desenvolvedores. Neste tópico, serão abordados detalhadamente esses padrões, além de serem apresentados exemplos concretos de suas aplicações em projetos reais. É importante ressaltar que, de acordo com as particularidades de cada projeto, é necessário ajustar a lógica de implementação, uma vez que cada empreendimento possui necessidades e funcionalidades distintas.

A aplicação de, pelo menos, um desses padrões durante o desenvolvimento possibilita prevenir futuras dores de cabeça. Ao escolher estrategicamente e adotar tais padrões, os desenvolvedores podem mitigar problemas potenciais e simplificar a manutenção do sistema no futuro. A reflexão acerca da escolha e implementação dessas práticas resultará em benefícios significativos para o sucesso do projeto.

## Quais são? 
Teremos um post para cada um deles, mas os principais são:
 

1. Padrão Strategy (Estratégia): Permite definir uma família de algoritmos, encapsular cada um deles e torná-los intercambiáveis. Isso permite que o cliente escolha o algoritmo a ser usado sem modificar o código do cliente.
2. Padrão Observer (Observador): Define uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.
3. Padrão Chain of Responsibility (Corrente de Responsabilidade): Permite que você envie uma solicitação ao longo de uma cadeia de objetos. Cada objeto na cadeia pode tratar a solicitação ou passá-la para o próximo objeto na cadeia.
4. Padrão Command (Comando): Encapsula uma solicitação como um objeto, permitindo que você parametrize clientes com diferentes solicitações, enfileire ou registre solicitações e suporte operações reversíveis (desfazer).
5. Padrão Template Method (Método Template): Define o esqueleto de um algoritmo em uma operação, mas permite que as subclasses redefinam etapas específicas desse algoritmo sem alterar sua estrutura.
6. Padrão State (Estado): Permite que um objeto altere seu comportamento quando seu estado interno muda. Parece que o objeto mudou sua classe.
7. Padrão Interpreter (Intérprete): Fornece uma maneira de avaliar a gramática ou expressão de uma linguagem.
8. Padrão Visitor (Visitante): Permite adicionar novas operações a uma estrutura de objetos existente sem modificar essa estrutura.
9. Padrão Mediator (Mediador): Define um objeto que centraliza a comunicação entre objetos em um sistema. Os objetos se comunicam por meio do mediador, em vez de se comunicarem diretamente entre si.
10. Padrão Memento (Memorando): Permite que você capture e restaure o estado interno de um objeto sem expor sua estrutura interna.