Design Patterns

O desenvolvedor está bêbado...

O que são?

"Técnicas de modelagem de classes e objetos que resolvem problemas comuns no desenvolvimento de software."

Exclusivo do Java?

"Utilizado em linguagens orientadas a objetos, como C++, Smalltalk, Java, C#, Golang, etc."

Alguns benefícios?

  • Padronização;
  • Documentação implícita;
  • Comunicação entre desenvolvedores.

Cenário I

"Precisamos garantir que existirá apenas uma instância de uma determinada classe durante o ciclo de vida da aplicação. Nesta instância, guardaremos algumas informações globais."

Singleton

  • Única instância;
  • Menos objetos de mortalidade infantil;
  • Garbage Collector agradece!

O código

Cenário II

"Temos alguns botões no nosso Discman, como o play, pause, stop e record. Como podemos organizar a implementação das regras de negócio de cada um dos botões?"

Command

  • Divisão das responsabilidades;
  • Uma hierarquia de objetos;
  • Popularmente utilizado com Factory Method.

O código

Cenário III

"Nosso controlador não deve saber como construir os comandos, apenas como utilizá-los. O que acham sobre delegarmos a construção dos nossos comandos a outro objeto?"

Factory Method

  • Nenhum acoplamento entre a classe PlayerController e seus comandos.

O código

Cenário IV

"Na classe Pedido você implementa o método getTotalComDesconto(). O desconto varia conforme a forma de pagamento escolhida pelo cliente ou o valor total da compra."

Strategy

  • Encapsulamento dos algoritmos;
  • Isolamento do código que varia da classe Pedido.

O código

Cenário V

"A escola decidiu abrir uma nova turma, porém com um preço promocional. Como podemos reaproveitar o código da classe Turma modificando apenas o método que retorna o valor final, sem utilizar herança?"

Decorator

  • Use quando for necessário adicionar responsabilidades;
  • Sem herança.

O código

Dúvidas?

Obrigado!

about.me/ricardo.longa

Design Patterns

By Ricardo Longa