Você está na página 1de 9

DCC / ICEx / UFMG

Padrões de Projeto

Um padrão é uma descrição do


Padrões de Projeto problema e a essência da sua solução
Documenta boas soluções para
problemas recorrentes
Permite o reuso de conhecimento
anterior documentados em boas práticas
Eduardo Figueiredo
Deve ser suficientemente abstrato
http://www.dcc.ufmg.br/~figueiredo
para ser reusado em aplicações
diferentes

Os 23 Padrões de Projeto Além dos 23 Padrões GoF

Os 23 padrões de projeto Novos padrões de projeto surgem a


mais conhecidos foram todo momento
popularizados pelo livro de Padrões para áreas específicas, como
E. Gamma, R. Helm, R. padrões de interface, padrões de
Johnson e J. Vlissides persistência, padrões de arquitetura, etc.
Conhecido como Existem vários livros sobre padrões de
Gang-of-Four (GoF) projeto
A maioria deles se concentra nos 23
padrões GoF

Classificação dos Padrões Documentação de um Padrão


Segundo o seu propósito Nome e classificação
De Criação: tratam da criação de objetos
Outros nomes
Estruturais: tratam da composição de classes e
objetos Motivação Implementação
Comportamentais: tratam das interações e Aplicações Código de
responsabilidades entre classes e objetos
Estrutura exemplo
Segundo seu escopo
Classes: lidam com os relacionamentos entre Participantes Usos conhecidos
classes e subclasses
Colaboração Padrões
Objetos: lidam com os relacionamentos entre relacionados
objetos Consequências
Elementos Principais
Nome
Um identificador significativo para o padrão Padrões de Criação
Descrição do problema
Descrição da solução
Um template de solução que pode ser
instanciado em maneiras diferentes
Consequências
Os resultados e compromissos de
aplicação do padrão

Padrões de Criação Problema (Factory Method)

Abstract Factory Uma classe não sabe antecipar o tipo


dos objetos que a mesma precisa criar
Builder É preciso adiar a instanciação de objetos
para as subclasses
Factory Method Exemplo: suponha uma aplicação lida
com diversos tipos de documentos
Prototype Ela sabe quando os documentos devem
ser criados, mas não sabem que
Singleton documentos criar

Padrão Factory Method Solução do Factory Method


Nome
Factory Method
Descrição do problema
Slide anterior
Descrição da solução
Próximo slide
Consequências
Super-classes não conhecem o
Eliminam dependências de classes
produto específico.
específicas (código lida com as interfaces)
Solução do Factory Method Solução do Factory Method

O método fábrica cria e retorna o O produto geral pode seu usado pela superclasse,
objeto no momento adequado. mesmo sem conhecer o produto específico.

Padrões de Criação Padrão Singleton

Abstract Factory Nome


Singleton
Builder Descrição do problema
Uma classe precisa ter uma única instância
Factory Method Descrição da solução
Próximo slide
Prototype
Consequências
Singleton Fácil acesso e gerência de recursos
compartilhados, como variáveis globais

Solução do Singleton Exemplo: ClasseSingleton


public class ClasseSingleton {

private static ClasseSingleton instance;


private int numInstances = 0;
Atributo que armazena a
private ClasseSingleton() { única instancia da classe.
numInstances++;
O construtor é privado }

O método instance() é public static ClasseSingleton getInstance() {


if (instance == null) instance = new ClasseSingleton();
público e estático return instance;
}
Retorna a única instância
que é guardada em uma public void printNumInstances() {
System.out.println("numInstances = "+numInstances);
variável de classe }
}
Exemplo: ClasseSingleton Exemplo: ClasseSingleton
public class ClasseSingleton { public class ClasseSingleton {

private static ClasseSingleton instance; private static ClasseSingleton instance;


private int numInstances = 0; private int numInstances = 0;
Construtor da classe é
private ClasseSingleton() { privado para evitar criação private ClasseSingleton() { Única instancia só pode ser
numInstances++; acidental de outras instancias. numInstances++; obtida pela chamada ao método
} } getInstance() da classe.
public static ClasseSingleton getInstance() { public static ClasseSingleton getInstance() {
if (instance == null) instance = new ClasseSingleton(); if (instance == null) instance = new ClasseSingleton();
return instance; return instance;
} }

public void printNumInstances() { public void printNumInstances() {


System.out.println("numInstances = "+numInstances); System.out.println("numInstances = "+numInstances);
} }
} }

Exemplo: ClasseSingletonTest
public class ClasseSingletonTest {

public static void main(String[] args) { Padrões Estruturais


ClasseSingleton singleton = ClasseSingleton.getInstance();
// ClasseSingleton singleton = new ClasseSingleton();
singleton.printNumInstances();
}
}

Tentar criar uma instância pela chamada


ao construtor causa erro de compilação.

Padrões Estruturais Problema (Padrão Adapter)

Adapter Uma biblioteca é projetada para ser


Bridge reusada
Composite Entretanto, a interface da biblioteca
(assinatura dos métodos) pode não ser
Decorator
exatamente a esperada pela aplicação
Facade Não é desejável alterar o código da
Flyweight aplicação
Proxy Não é desejável alterar a interface da
biblioteca
Padrão Adapter Solução do Adapter

Nome
Adapter
Descrição do problema
Permitir que classes com interfaces
incompatíveis trabalhem juntos
Descrição da solução (próximo slide)
Consequências
Reuso de funcionalidades de uma classe
sem alterar sua interface

Solução do Adapter Solução do Adapter

O cliente (Client) precisa de uma funcionalidade. A funcionalidade já está implementada no Adaptee.


Entretanto, os métodos tem assinaturas diferentes.

Solução do Adapter Solução do Adapter


Classes adaptadoras. Classes adaptadoras.

A classe Target tem a assinatura do método que o A classe Adapter converte a assinatura do método
cliente precisa. em Adaptee para aquela que o cliente precisa.
Padrões Estruturais Problema (Padrão Composite)

Adapter Algumas aplicações permitem construir


Bridge entidades complexas a partir de
elementos mais simples
Composite
Exemplo: Editor de Figuras
Decorator
Facade
Figuras
Flyweight Primitivas
Proxy
Linha Círculo

Problema (Padrão Composite) Problema (Padrão Composite)

Algumas aplicações permitem construir Algumas aplicações permitem construir


entidades complexas a partir de entidades complexas a partir de
elementos mais simples elementos mais simples
Exemplo: Editor de Figuras Exemplo: Editor de Figuras

Figuras Figuras
Compostas Compostas
Quadrado Triângulo Casa Rosto

Padrão Composite Solução do Composite


Nome
Composite
Descrição do problema
Compor objetos em estrutura hierárquica (todo-
parte)
Descrição da solução (próximo slide)
Consequências
Objetos primitivos e compostos são tratados de
maneira uniforme
Fácil incluir novos objetos Component define as operações genéricas.
Solução do Composite Solução do Composite

Leaf define operações de elementos primitivos. Composite representa elementos compostos.

Padrões Estruturais Problema (Padrão Decorator)


Adicionar e remover responsabilidades
Adapter
dinamicamente a um objeto
Bridge
Composite
Decorator
Facade
Flyweight
Proxy

Padrão Decorator Solução do Decorator


Nome
Decorator
Descrição do problema
Agregar dinamicamente novas
responsabilidades a um objeto
Descrição da solução (próximo slide)
Consequências
Maior flexibilidade que herança
Evita sobrecarregar hierarquia de classes Decorator conhece o componente a ser decorado.
Solução do Decorator

Padrões Comportamentais

Podem haver vários decoradores concretos.

Padrões Comportamentais Problema (Padrão Observer)

Chain of Responsibility
Command Observer
Interpreter State
Iterator Strategy
Mediator Template Method
Memento Visitor

Padrão Observer Solução do Observer

Nome
Observer
Descrição do problema
Separar o objeto de sua forma de
apresentação
Descrição da solução (próximo slide)
Consequências
Otimizações para melhorar a atualização
da apresentação
Padrões Comportamentais Problema (Strategy)

Chain of Responsibility Existem vários algoritmos para um


mesmo problema
Command Observer
Exemplo: vários algoritmos de ordenação
Interpreter State de array (BubbleSort, QuickSort, etc.)
O objetivo é implementar e executar
Iterator Strategy
diferentes algoritmos usando uma
Mediator Template Method mesma interface
Encapsular os diferentes algoritmos e
Memento Visitor torná-los intercambiáveis

Padrão Strategy Solução do Strategy

Nome
Strategy
Descrição do problema
Definir uma família de algoritmos
Descrição da solução
próximo slide
Consequências
A aplicação usa o algoritmos sem
Permite alternar entre diferentes algoritmos conhecer sua real implementação.
sem o uso de condicionais

Solução do Strategy Referências

E. Gamma, R. Helm, R. Johnson, J.


Vlissides. Padrões de Projeto, 1a.
Edição. Bookman, 2000.
Padrões: Factory Method, Singleton,
Adapter, Composite, Decorator,
Observer e Strategy

Diferentes implementações
do algoritmo.

Você também pode gostar