22
Padrões de Projeto

Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Embed Size (px)

Citation preview

Page 1: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Padrões de Projeto

Page 2: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Padrões

Padrões de Projeto

Page 3: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

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 de Projeto

Page 4: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Padrões abordados

• Singleton• Prototype• Factory Method• Abstract Factory• Adapter• Composite• Decorator• Facade

• Proxy• Command• Observer• State• Strategy• Visitor

Padrões de Projeto

Page 5: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Singleton

• Única instância de uma classe

• Pattern ou Anti-pattern?– Sincronização– Classloading– Distribuição– Escopo– [Não] coleta de lixo – Testes– Reuso

Padrões de Projeto

Page 6: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Prototype

• Clonagem• Fundo (deep ) x Raso

(shallow)• Collections• Transients

Padrões de Projeto

Page 7: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Factory Method

• Criar objetos sem especificar a classe concreta

• Polimórficos ou não

Padrões de Projeto

Page 8: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Abstract Factory

• Criar familias de objetos relacionados• Independência da camada abaixo• Custo de complexidade

Padrões de Projeto

Page 9: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Abstract Factory

Padrões de Projeto

Page 10: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Adapter

• Reuso quando uma interface diferente é esperada

Padrões de Projeto

Page 11: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Composite

• Estruturas parte-todo (árvore)

Padrões de Projeto

Page 12: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Decorator

Padrões de Projeto

• Adicionar responsabilidade sem adicionar dependência

Page 13: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Facade

Padrões de Projeto

• Isolar o cliente da complexidade de um subsistema

Page 14: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Proxy

Padrões de Projeto

• “Super” referência– Remoting– Lazy– Secure …

• Dynamic Proxy– Interface implementada

em runtime– InvocationHandler

Page 15: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Command

• Execução flexível– Agendamento– Enfileiramento– Persistência– Compensação– Composição

Padrões de Projeto

Page 16: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Observer

T V

a 10 45

b 12 24

Padrões de Projeto

0204060

Modela(10,45)b(12,24)

Alteração

Notificação

• Publish / Subscribe• Modelos Push / Pull• java.util.Observer• java.util.Observabl

e

Page 17: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

State

Padrões de Projeto

• Alterar comportamento sem alterar classe

Page 18: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Strategy

Padrões de Projeto

• Definir algorítmos intercambiáveis

Page 19: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

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

Page 20: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Combos

• Singleton + [Abstract] Factory• Command + Composite + Decorator• DAO (Value Object + Abstract Factory +

Broker)

Padrões de Projeto

Page 21: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Anti-patterns

• Big Ball Of Mud• Gas Factory• Interface Bloat• God Object• Magic Pushbutton• Object Orgy• Accidental

Complexity

Padrões de Projeto

http://c2.com/cgi/wiki?AntiPatternhttp://www.manning.com/tate/

Page 22: Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de classes e objetos Interface x Implementação Herança de

Padrões de Projeto

Dúvidas?