Padrões de Projeto
Padrões de Projeto Padrões
Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de classe x Herança de interface Composição x Herança Delegação
Padrões abordados Singleton Prototype Factory Method Abstract Factory Padrões de Projeto Padrões abordados Singleton Prototype Factory Method Abstract Factory Adapter Composite Decorator Facade Proxy Command Observer State Strategy Visitor
Singleton Única instância de uma classe Pattern ou Anti-pattern? Padrões de Projeto Singleton Única instância de uma classe Pattern ou Anti-pattern? Sincronização Classloading Distribuição Escopo [Não] coleta de lixo Testes Reuso
Prototype Clonagem Fundo (deep ) x Raso (shallow) Collections Padrões de Projeto Prototype Clonagem Fundo (deep ) x Raso (shallow) Collections Transients
Factory Method Criar objetos sem especificar a classe concreta Padrões de Projeto Factory Method Criar objetos sem especificar a classe concreta Polimórficos ou não
Abstract Factory Criar familias de objetos relacionados Padrões de Projeto Abstract Factory Criar familias de objetos relacionados Independência da camada abaixo Custo de complexidade
Padrões de Projeto Abstract Factory
Adapter Reuso quando uma interface diferente é esperada Padrões de Projeto Adapter Reuso quando uma interface diferente é esperada
Padrões de Projeto Composite Estruturas parte-todo (árvore)
Decorator Adicionar responsabilidade sem adicionar dependência Padrões de Projeto Decorator Adicionar responsabilidade sem adicionar dependência
Facade Isolar o cliente da complexidade de um subsistema Padrões de Projeto Facade Isolar o cliente da complexidade de um subsistema
Proxy “Super” referência Dynamic Proxy Remoting Lazy Secure … Padrões de Projeto Proxy “Super” referência Remoting Lazy Secure … Dynamic Proxy Interface implementada em runtime InvocationHandler
Command Execução flexível Agendamento Enfileiramento Persistência Padrões de Projeto Command Execução flexível Agendamento Enfileiramento Persistência Compensação Composição
Observer Publish / Subscribe Modelos Push / Pull java.util.Observer Padrões de Projeto Observer Publish / Subscribe Modelos Push / Pull java.util.Observer java.util.Observable T V a 10 45 b 12 24 Notificação Alteração Model a(10,45) b(12,24)
Padrões de Projeto State Alterar comportamento sem alterar classe
Padrões de Projeto Strategy Definir algorítmos intercambiáveis
Visitor Isolar operações do modelo Evita “poluição” do modelo. Padrões de Projeto Visitor Isolar operações do modelo Evita “poluição” do modelo. Permite adicionar novas operações sem alterar o modelo Alterações no modelo, entretanto, podem ser trabalhosas
Combos Singleton + [Abstract] Factory Command + Composite + Decorator Padrões de Projeto Combos Singleton + [Abstract] Factory Command + Composite + Decorator DAO (Value Object + Abstract Factory + Broker)
Anti-patterns Big Ball Of Mud Gas Factory Interface Bloat God Object Padrões de Projeto Anti-patterns Big Ball Of Mud Gas Factory Interface Bloat God Object Magic Pushbutton Object Orgy Accidental Complexity http://c2.com/cgi/wiki?AntiPattern http://www.manning.com/tate/
Padrões de Projeto Dúvidas?