Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de...

22
Padrões de Projeto

Transcript of Padrões de Projeto. Padrões Padrões de Projeto Padrões de Padrões Acoplamento Coesão Reuso de...

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?