Você está na página 1de 56

Padrões de Projeto

Design Patterns
PROF. DR. DANIEL VECCHIATO
Bibliografia
Filme de ação

Filme de romance

Padrão de
O que é Padrão de
Projeto? Altura do interruptor

Projeto? Tamanho de uma mesa

Mesma coisa Problemas se repetem


acontece com e também suas
sistemas: soluções!

A ideia é reutilizar
projetos e arquiteturas Técnicas testadas e
aprov adas!
bem sucedidas
O que é  “Cada padrão descreve um problema no
nosso ambiente e o cerne da sua solução, de
padrão de tal forma que você possa usar essa solução
mais de um milhão de vezes, sem nunca fazê-
projeto? lo da mesma maneira” Christopher Alexander
Padrões de Criação (5):
Abstract Factory
Singleton ...
Factory Method

Padrões de Padrões Estruturais (7):

Projeto Adapter Composite Decorator ...

Padrões Comportamentais (11):


Template
Observer Strategy ...
Method
Reuso

Coesão

Acoplamento

• POO é Granularidade

difícil Manutenibilidade

Orçamento

Tempo

Equipe
Nome do •Facilita comunicação
Padrão

Elemento Problema •Descreve em que situação aplicar o


padrão

Essenciais
dos Padrões Solução
•Descreve, de forma abstrata, os
elementos que compõem o padrão de
projeto, seus relacionamentos, suas

de Projeto
responsabilidades e colaborações.

•Resultados e análises das vantagens e


Consequências desvantagens da aplicação do padrão.
•Tradeoff entre espaço e tempo.
Padrões de
Criação
PROF. DR. DANIEL VECCHIATO
Os padrões de criação abstraem o processo
de instanciação.

Padrões de Ocultam o modo como as instâncias destas


classes são criadas e compostas
Criação
Os padrões de criação dão muita flexibilidade
ao que, como e quando é criado e a quem
cria
Padrões de Criação

AbstractFactory Builder Factory Method

• Fornecer uma • Separar a construção • Definir uma interface


interface para criação de um objeto para criar um objeto,
de famílias de objetos complexo da sua mas deixar as
relacionados ou representação de subclasses decidirem
dependentes sem modo que o mesmo que classe instanciar.
especificar suas processo de
classes concretas. construção possa criar
diferentes
representações.
Padrões de Criação

Prototype Singleton

•Especificar os tipos de •Garantir que uma classe


objetos a serem criados tenha somente uma
usando uma instância- instância e fornecer um
protótipos e criar novos ponto global de acesso
objetos pela cópia desse para a mesma
protótipo.
Singleton
PROF. DR. DANIEL VECCHIATO
 Garantir que uma classe tenha somente uma
Intenção instância e fornecer um ponto global de
acesso para a mesma
Aplicabilidade

 Algumas classes precisam ter apenas uma instância.


 Exemplos:
 Quando é necessário controlar a concorrência de acesso a recursos
compartilhados:
 Fila de impressão;
 Gerenciador de janelas;
 Sistema de arquivos.
 Conexão com Banco de dados

 Log;
 Variáveis de ambiente.
Consequências

1 2 3 4
Acesso Espaço de Permite um Permite um
controlado à nomes reduzido refinamento de número variável
instância única; operações e da de instâncias
representação
Abstract Factory
PROF. DR. DANIEL VECCHIATO
 Fornecer uma interface para criação de
famílias de objetos relacionados ou
Intenção dependentes sem especificar suas classes
concretas.
um sistema deve ser independente de
como seus produtos são criados, compostos
ou representados
um sistema deve ser configurado como um
produto de uma família de múltiplos
produtos
Aplicabilidade uma família de objetos-produto for
projetada para ser usada em conjunto, e
você necessita garantir esta restrição
você quer fornecer uma biblioteca de
classes de produtos e quer revelar somente
suas interfaces, não suas implementações
Consequências

1 2 3 4
Ele isola as Ele torna fácil Ela promove É difícil de
classes a troca de a harmonia suportar
concretas famílias de entre novos tipos
produtos produtos de produtos
Factory Method
PROF. DR. DANIEL VECCHIATO
 Definir uma interface para criar um objeto, mas
deixar as subclasses decidirem que classe
instanciar.
Intenção  O Factory Method permite adiar a
instanciação para subclasses.
Aplicabilidade

 uma classe não pode antecipar a classe de objetos que deve criar
 uma classe quer que suas subclasses especifiquem os objetos que
criam
 classes delegam responsabilidade para uma dentre várias
subclasses auxiliares, e você quer localizar o conhecimento de qual
subclasse auxiliar que é a delegada.
Consequências

1 2 3
Elimina a necessidade de Criar objetos dentro de uma Conecta hierarquias de
anexar classes específicas classe com um método classe paralelas¹
das aplicações no código. fábrica é sempre mais
flexível do que criar um
objeto diretamente.

¹ Hierarquias de classe paralelas ocorrem quando uma classe delega alguma das suas responsabilidades para uma classe
separada. (ex: Figura e Manipulação)
Padrões de Projeto
Estruturais
PROF. DR. DANIEL VECCHIATO
Preocupam com a forma como classes e
objetos são compostos para formar estruturas
maiores

Padrões De classes: Utilizam herança para compor


interfaces ou implementações
Estruturais
De objetos: descrevem maneiras de compor
objetos para obter novas funcionalidades
Padrões de Estruturais

Adapter Composite Decorator

• Converter a interface • Compõe objetos em • Atribui


de uma classe em outra estrutura de árvore para responsabilidades
interface, esperada representar hierarquias adicionais a um objeto
pelos clientes. Permite do tipo partes-todo. dinamicamente.
que classes com Permite que os clientes Fornece uma alternativa
interfaces incompatíveis tratem objetos flexível a subclasse para
trabalhem em conjunto. individuais e extensão da
composições de objetos funcionalidade.
de maneira uniforme
Padrões de Estruturais

Bridge Façade Flyweight Proxy

•Separa uma abstração •Fornece uma interface •Usa compartilhamento •Fornece um objeto
da sua unificada para um para suportar grandes representante
implementação, de conjunto de interfaces quantidades de (surrogate), ou um
modo que as duas em um subsistema. objetos, de marcador de
possam variar Define uma interface granularidade fina, de outro objeto, para
independentemente. de nível mais alto que maneira eficiente. controlar o acesso ao
torna o subsistema mesmo.
mais fácil de usar.
Adapter
PROF. DR. DANIEL VECCHIATO
 Converter a interface de uma classe em outra
interface, esperada pelos clientes. O Adapter
Intenção permite que classes com interfaces
incompatíveis trabalhem em conjunto, o que,
de outra forma, seria impossível
Motivação

 Algumas vezes, uma classe de um toolkit, projetada para ser


reutilizada não é reutilizável porque sua interface não corresponde
à interface específica de um domínio requerida por uma
aplicação.
Consequências

1 2
É possível introduzir novos tipos de A complexidade geral do código aumenta
adaptadores no programa sem quebrar o porque você precisa introduzir um conjunto
código cliente existente, desde que eles de novas interfaces e classes. Algumas
trabalhem com os adaptadores através da vezes é mais simples mudar a classe serviço
interface cliente. para que ela se adeque com o resto do seu
código
Composite
PROF. DR. DANIEL VECCHIATO
Intenção

 Compor objetos em estruturas de árvore para representarem


hierarquias partes-todo. Composite permite aos clientes tratarem
de maneira uniforme objetos individuais e
composições de objetos.
Motivação

 Quando você tem que implementar uma estrutura de objetos tipo


árvore.
 quando você quer que o código cliente trate tanto os objetos
simples como os compostos de forma uniforme.
 Um exemplo clássico é um editor de imagens, no qual a imagem
pode, ou não, ser composta por diversas primitivas (círculo,
quadrado, ponto, linha)
Consequências

1 2 3
Define hierarquias de classe que Torna o cliente simples. Os client es Pode tornar o projeto excessivamente
consistem de objetos primitivos podem tratar estruturas compostas e genérico. A desvantagem de facilitar
e objetos compostos. Os objetos objetos individuais de maneira o acréscimo de novos componentes é
primitivos podem compor objetos mais uniforme. que isso torna mais difícil restringir
complexos, os quais, por sua vez, os componentes de uma
também podem compor outros composição.
objetos, e assim por
diante, recursivamente.
Decorator
PROF. DR. DANIEL VECCHIATO
 Dinamicamente, agregar responsabilidades

Intenção adicionais a um objeto. Os decorators


fornecem uma alternativa flexível ao uso de
subclasses para extensão de funcionalidades
Motivação

 Algumas vezes precisamos:


 acrescentar responsabilidades a objetos individuais, e não a toda uma
classe.
 projetar comportamentos adicionais para objetos em tempo de
execução sem quebrar o código que usa esses objetos.
 Utilize o padrão quando é complicado ou impossível estender o
comportamento de um objeto usando herança.
Consequências

1 2
Maior flexibilidade do que herança Evita classes sobrecarregadas de
estática: Responsabilidades podem ser características na parte superior da
acrescentadas e removidas em tempo hierarquia
de execução simplesmente associando-
as e dissociando-as de uma objeto
Padrões
Comportamentais
PROF. DR. DANIEL VECCHIATO
se preocupam com algoritmos e a
atribuição de responsabilidades entre
objetos

não descrevem apenas padrões de


Padrões objetos ou classes, mas também os
Comportamentais padrões de comunicação entre eles
Padrões de Compartamentais

Observer Strategy Template method

• Define uma dependência • Define uma família de • Define o esqueleto de um


um-para-muitos entre algoritmos, encapsula algoritmo em uma
objetos, de modo que, cada um deles e os torna operação, postergando a
quando um objeto muda intercambiáveis. Permite definição de alguns
de estado, todos os seus que o algoritmo varie passos para subclasses.
dependentes são independentemente dos Permite que as subclasses
automaticamente clientes que o utilizam. redefinam certos passos
notificados e atualizados. de um algoritmo sem
mudar sua estrutura.
Padrões de Compartamentais

Interpreter Chain of Responsability Command Iterator

•Dada uma linguagem, •Evita o acoplamento •Encapsula uma •Fornece uma maneira
define uma do remetente de uma solicitação como um de acessar
representação para solicitação ao seu objeto, desta forma sequencialmente os
sua gramática destinatário, dando a permitindo que você elementos de uma
juntamente com um mais de um objeto a parametrize clientes agregação de objetos
interpretador que usa chance de tratar a com diferentes sem expor sua
a representação para solicitação. Encadeia solicitações, enfileire representação
interpretar sentenças os objetos receptores ou registre (log) subjacente.
nessa linguagem. e passa a solicitação solicitações e suporte
ao longo da cadeia operações que
até que um objeto a podem ser desfeitas.
trate.
Padrões de Compartamentais

Mediator Memento State Visitor

•Define um objeto que •Sem violar o •Permite que um objeto •Representa uma
encapsula a forma encapsulamento, altere seu operação a ser
como um conjunto de captura e externaliza comportamento executada sobre os
objetos interage. um estado interno de quando seu estado elementos da estrutura
Promove o um objeto, de modo interno muda. O de um objeto. Permite
acoplamento fraco ao que o mesmo possa objeto parecerá ter que você defina uma
evitar que os objetos posteriormente ser mudado de classe. nova operação sem
se refiram restaurado para este mudar as classes dos
explicitamente uns aos estado. elementos sobre os
outros, permitindo que quais opera.
você varie suas
interações
independentemente.
Observer
PROF. DR. DANIEL VECCHIATO
 Definir uma dependência um-para-muitos
entre objetos, de maneira que quando

Intenção um objeto muda de estado todos os seus


dependentes são notificados e
atualizados automaticamente.
Motivação

 Manter a consistência entre os objetos sem aumentar o


acoplamento, pois nesse caso, a reusabilidade seria
comprometida.
 Algumas vezes uma mudança em um objeto exige mudanças em
outros, e você não sabe quantos objetos necessitam ser mudados
Consequências

1 2 3
É possível introduzir novas Podem ser estabelecidas Assinantes são notificados
classes assinantes sem ter relações entre objetos em ordem aleatória.
que mudar o código da durante a execução.
publicadora (e vice versa se
existe uma interface
publicadora).
Strategy
PROF. DR. DANIEL VECCHIATO
 Definir uma família de algoritmos, encapsular
cada uma delas e torná-las intercambiáveis.

Intenção Strategy permite que o algoritmo varie


independentemente dos clientes que
o utilizam.
Motivação

 Utilize o padrão Strategy quando você quer usar diferentes variantes


de um algoritmo dentro de um objeto e ser capaz de trocar de um
algoritmo para outro durante a execução.
 muitas classes relacionadas diferem somente no seu comportamento.
As estratégias fornecem uma maneira de configurar uma classe com
um dentre muitos comportamentos.
 Exemplo prático:
 Uma classe que calcula diferentes tipos de rotas:
 Carro
 Pedestre
 Ciclista
 Transporte público
Consequências

1 2 3
Se você só tem um par de algoritmos Os Clientes devem estar cientes das Muitas linguagens de programação
e eles raramente mudam, não há diferenças entre as estratégias para permitem implementação de
motivo para deixar o programa mais serem capazes de selecionar a diferentes versões de um algoritmo
complicado com novas classes e adequada. em funções anônimas. Essas funções
interfaces que vêm junto com o podem ser usadas como se estivesse
padrão. usando objetos estratégia, mas sem
inchar seu código com classes e
interfaces adicionais.
Template Method
PROF. DR. DANIEL VECCHIATO
 Definir o esqueleto de um algoritmo em uma
operação, postergando alguns passos para as

Intenção subclasses. Template Method permite que


subclasses redefinam certos passos de um
algoritmo sem mudar a estrutura do mesmo
Motivação

 Deixar os clientes estender apenas etapas particulares de um


algoritmo, mas não todo o algoritmo e sua estrutura.
 Utilize o padrão quando você tem várias classes que contém
algoritmos quase idênticos com algumas diferenças menores.
Como resultado, você pode querer modificar todas as classes
quando o algoritmo muda.
Consequências

1 2
Técnica fundamental para a Clientes podem sobrescrever apenas
reutilização de código certas partes de um algoritmo grande,
tornando-os menos afetados por
mudanças que acontece por outras
partes do algoritmo.

Você também pode gostar