Série Design Pattern: Não é Receita de Bolo

Olá Pessoal,
Estarei dando inicio à mais uma série aqui no blog. E dessa vez será sobre Design Pattern. Claro que não abordarei todos os padrões (até porque não tenho experiência de ter usado todos no dia-dia, na minha opinião fazer um projeto como prova de conceito é uma coisa e usar para resolver problemas de cliente é outra.Não posso assumir que sei algo só porque fiz uma prova de conceito um house made e deu certo), mas aqueles que considerei importantes e que é muito comum no dia-dia. Uma vez que, para padrões não há uma receita de bolo, e sim que depende muito do contexto. E não se preocupe se você não sabe todos os design pattern de cabeça ao olhar um problema. Até por que a ideia não é decorar e sim saber usar, ter um bom livro de design pattern na sua mesa sempre é bom.
Para essa série não vou seguir um padrão em cada post, pois tudo depende do tipo do padrão que vou abordar, alguns nem precisam de código para entender, outros são tão abstratos que é preciso desenhar, enfim vou buscar usar diferentes formas de tentar explicar cada design pattern da série de forma que você ao término do post saiba o objetivo tanto teórico e uma ideia pratica de onde como usá-lo.

Lets go…

Design Pattern
Antes de mais nada é preciso conhecer os padrões: criação, estruturais e comportamentais. Pois, eles dizem qual padrão iremos usar. Por exemplo: se preciso adotar um padrão para criação de objetos, terei que olhar  para os padrões existentes  em “Padrões de criação”. Por que lá? Veremos daqui à pouco.

Então não adianta querer decorar os padrões. Na verdade eles não foram feitos para serem decorados e saber quando aplica-los de acordo com o contexto. Design Pattern não é receita de bolo, que se você seguir do passo 1 até o 10, vai ter a solução. Alias a solução do seu “problema” é com você. Design Pattern não é uma biblioteca com resoluções de problemas.

Conhecendo os Padrões

A seguir fiz uma definição de maneira mais simples e objetiva possível para cada padrão.

Note:  Quando você tiver com algum problema de design, pense em que tipo de problema que você tem antes de adotar algum padrão.

  • Padrões de criação: ajuda a encapsular  a criação de objetos de um TIPO. Ou seja, é quando temos várias “respostas” com base no tipo do objeto passado.

São eles:factory method,abstract method, builder, prototype, singleton, multiton, object pool

Exemplo:  Se o objeto é do tipo pessoa juridica eu vou fazer isso: “Olá xxx,  CNPJ:111”. Mas, se for pessoa fisica é assim: “olá xxx, CPF:0000”.

  • Padrões Estruturais: Está relacionado as interações entre os objetos no sistema. Ou seja, é como os meus objetos vão se relacionar com os outros objetos. Busca evitar o alto acomplamento entre objetos.

São eles:adapter, bridge, composite, decorator, facade, front controller, flyweight, proxy

Então quando você precisar definir como será as interações entre objetos, não esqueça em dar uma olhada nos Padrões Estruturais e ver qual deles podem atender à sua necessidade.

  • Padrões Comportamentais: está relacionado  em saber as intenções  que um objeto pode fazer e como ele se relaciona com os outros objetos.

São eles:command, iterator, mediator, observer, state, strategy, template method, visitor

Como estudar?

Há dois livros bem famosos sobre o assunto. Um deles é do Erich Gama: Design Patterns: Elements of Reusable Object-Oriented Software e o outro é da série use a cabeça: Head First Design Pattern. E qual comprar?
Eu recomendo os dois.A ordem de leitura na minha opinião seria primeiro o da série Head First, caso você seja iniciante no assunto. O livro é bem didático. O do Erich eu diria é quando já temos uma certa dose de conhecimento sobre design pattern e queremos entender com mais detalhe. Há trechos no livro que o autor não é muito claro, e que para conseguir entender o que ele quis dizer é preciso já ter uma certa base de Design Pattern do contrário a informação fica perdida.  O livro do Erich Gamma é uma especie de referência que deve ficar na sua mesa para consultar. Até pq você não vai decorar os design pattern.

Git Hub 

Os projetos da série  estão Github:

https://camilolopes@github.com/camilolopes/workspacedesignpattern.git 

Abracos, vou ficando por aqui e espero que tenham gostado desse primeiro post. No próximo já vamos brincar colocando mão na massa.
See ya!!!