Você está na página 1de 5

Padrões de Design

Padrões de Design
Abstract Factory
• Provê uma interface para criação de famílias de
Finalidade objetos relacionados ou dependentes
Criação Estrutural Comportamental • Responsabilidade: Criar Objetos
Classe
• Factory Method • Adapter • Interperter • Benefícios
• Abstract • Adapter • Chain of Responsibility – Há limites de QUEM pode criar objetos, COMO eles
Factory • Bridge • Command
• Builder • Composite • Iterator são criados e QUANDO eles são criados (Restrições de
Escopo • Prototype • Decorator • Mediator Criação)
Objeto • Singleton • Facade • Momento
• Flyweight • Observer – Código de criação localizado em uma classe → menos
• Proxy • State chance de erros
• Strategy
• Vistor – Cliente desacoplado

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Abstract Factory Abstract Factory
• Problema: Família de Objetos precisam ser criados • Aplicabilidade:
• Solução: Coordena a criação de familias de objetos
• Participantes e Colaboradores: – Um sistema deve ser independente de como
– Abstract Factory: define a interface de como criar cada membro da seus objetos são criados, compostos ou
família representados
– Concrete Factory (CF): cria cada família (um CF para cada familia
criada) – Uma família de objetos foi projetada para ser
• Implementação: usada em conjuntos e é necessário garantir essa
– Define uma classe abstrata que especifica quais objetos serão restrição
criados
– Implementa uma classe concreta para cada familia

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Abstract Factory


Abstract Factory Exemplo (from Brent Ramerth)
AbstractFactory • Gerenciar enderecos e numero de
Declara uma interface para criar objetos
ConcreteFactory telefones
Implementa as operacoes para criar objeto – Fixo para enderecos no USA
concretos. Usualmente instanciado como
um Singleton. – Se você deseja amplia-lo para incorporar
AbstractProduct qualquer endereco/fone
Declara uma interface para um tipo de
objeto. Concrete Factories produz os
– Subclasses
objetos concretos • DutchAddress, JapanesePhoneNumber, etc.
ConcreteProduct
Define um objeto a ser criado pelo
concrete factory
Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

1
Abstract Factory Padrões de Design
Exemplo Singleton
• Defina um Factory e especifique os • Problema: Uma classe tem apenas uma instância e pvovê
objetos abstraindo os factories. um ponto de acesso global a essa instância
• Solução: Criar um método estático getInstance(). Quando
public class USAddressFactory implements o método for acessado pela primeira vez, cria a instancia
AddressFactory{ do objeto e retorna uma referencia para o objeto criado.
public Address createAddress(){
Em acessos subsequentes nenhuma instancia é criada e a
return new USAddress();
} referencia ao objeto existente é retornada.
• Participantes e Colaboradores:
public PhoneNumber createPhoneNumber(){ – Singleton: define uma operação Instance que permite que o cliente
return new USPhoneNumber(); acesse apenas sua única instância. Instance é uma operação da
} classe.
}

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Singleton Adapter
• Problema: Uma classe muitas vezes não é reusada porque
sua interface não corresponde à interface específica de uma
Singleton aplicação
Retorna instancia única
• Solução: Converter a interface de uma classe em outra
Static Instance() interface, permitindo que classes incompatíveis trabalhem
SingletonOperation() em conjunto
GetSingletonData() • Participantes e Colaboradores:
– Target (Destino): define a interface especifica que o cliente usa
Static uniqueInstance – Cliente: colabora com objetos compativeis com a interface de
singletonData Target
– Adaptee (Adaptado): define uma interface que vai ser adaptada
– Adapter (Adaptador): adapta a interface do Adaptee à interface
Target

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Adapter Adapter
• Aplicabilidade: • Dois padrões Adapter:
– Usado para prover uma nova interface para – Adaptador de Classes (Class Adapter)
sistemas existentes (sistemas legados) • Usa Herança Multipla para adaptar uma interface a
– Quando se quer usar uma classe existente mas outra
sua interface não corresponde a interface que – Adaptador de Objeto (Object Adapter)
necessita • Usa Herança Simples e Delegação
– Quando se quer criar uma classe reusável que
coopera com classes não previstas

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

2
Padrões de Design Padrões de Design
Adapter Strategy
• Problema: Uma classe muitas vezes não é reusada porque
• Exemplo Adapter sua interface não corresponde à interface específica de uma
aplicação
• Solução: Definir uma familia de algoritmos, encapsular
Class NewTime cada uma delas e torná-las intercambiáveis. O Strategy
{ permite que o algoritmo varie independentemente dos
public: clientes que o usam.
int getTime( ) { • Participantes e Colaboradores:
– Strategy: defube uma interface comum para todos os algoritmos
return ad_oldTime.getTime * 100 +50 suportados
} Adaptee – ConcreteStrategy: implementa o algoritmo usando a interface de
Strategy
private:
– Context: é configurado com um objeto ConcreteStrategy e mantem
OldTime ad_oldTime; uma referencia para o objeto Strategy.
};
Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Strategy Strategy
• Aplicabilidade:
Client Policy – Usado quando muitas classes relacionadas
diferem somente no seu comportamento. As
Context Strategy estratégias fornecem uma maneira de
configurar uma classe com um, dentre muitos
comportamentos.
Concrete Concrete
– Há necessidade de variantes de um algoritmo.
StrategyA StrategyB – Quando se quer criar uma classe reusável que
coopera com classes não previstas

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Strategy Strategy
• Benefícios: • Desvantagens:
– Famílias de algoritmos relacionados – O cliente tem de entender a diferença entre as
– Uma alternativa ao uso de subclasses estratégias
– Eliminam comandos condicionais da linguagem
de programação
– A possibilidade de escolha de implementações
(diferentes implementações do mesmo
comportamento)

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

3
Padrões de Design Padrões de Design
Strategy Decorator
• Exemplo: Objeto que adiciona características a outros objetos

– Interface entre redes com fio e sem fio


(diferentes estratégias para cada)
– Compressão de Arquivos
– Algoritmos inteligentes para jogos

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Decorator Decorator
• Problema: As vezes é necessario acrescentar responsabilidades a
objetos individuais e nao a toda uma classe.
• Solução: Dinamicamente agregar responsabilidades adicionais a um public class Decorator extends Component {
objeto. O Decorator permite extensão de funcionalidades.
• Participantes e Colaboradores: public Decorator(Component c){
– Component: define a interfae para objetos que podem ter
responsabilidades acrescentadas aos mesmos dinamicamente setLayout(new BorderLayout());
– ConcreteComponent: define um objeto para o qual responsabilidades
adicionais podem ser atribuidas add(c,BorderLayout.CENTER);
– Decorator: mantem uma referencia para um objeto Component e define
uma interface que segue a interface de Component (opcionalmente pode
executar operações adicionais antes e depois de repassar a solicitação). }
– ConcreteDecorator: acrescenta responsabilidades ao componente.
}

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Decorator Decorator
– Pizza Decorator adiciona ingredientes a Pizza • Exemplo:
– Adicionar scroll bars e bordas a controles
– Original de Interfaces de Usuário
• Subclasses de Pizza – JScrollPanel é a container com scroll
bars a qual pode-se adiconar qualquer
• Explosão Combinatorial em numero de subclasses componente
– Usando padrão decorator
• A classe Pizza decorator adiciona ingredientes a
objetos Pizza dinamicamente // JScrollPane decora GUI components
JTextArea area = new JTextArea(20, 30);
• Pode criar diferentes combinações de ingredientes JScrollPane scrollPane =
sem modificar a classe Pizza new JScrollPane(area);
contentPane.add(scrollPane);

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

4
Padrões de Design Padrões de Design
Decorator Resumo
• Strategy X Decorator 1. Abstract Factory- Cria uma instancia de várias
famílias de classe
– Duas formas de mudar um objeto: Strategy
2. Builder - Separa construção de objetos da sua
permite mudar o interior de um objeto.
representação
Decorator permite mudar a superficie do objeto.
3. Factory Method – Cria uma instância de várias
• Adapter X Decorator classes derivadas
– Decorator somente muda as responsabilidades 4. Prototype – Uma instância é copiada ou clonada
de um objeto e não sua interface. O adapter dá 5. Singleton – Uma classe que tem uma única
uma interface nova. instância

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design Padrões de Design


Resumo Resumo
6. Adapter – Compatibiliza interfaces de diferentes classes 13. Chain of Responsibility – uma forma de passar uma
Match solicitação entre uma cadeia de objetos
7. Bridge – Separa a interface de um objeto de sua 14. Command – Encapsula um comando
implementação
15. Interpreter – Uma maneira de incluir eleentos da
8. Composite – Uma estrutura de árvore de objetos simples
ou compostos linguagem em um programa
9. Decorator – Adiciona responsabilidades a objetos 16. Iterator – Acesso sequencial a elementos de uma coleção
dinamicamente 17. Mediator – Define comunicação simplificada entre
10. Façade – Classe única que representa um sistema inteiro classes
11. Flyweight – Instancia usada para compartilahmento 18. Memento – Captura e recupera o estado interno de um
12. Proxy – Objecto representando outro objeto objeto

Arquitetura de Software – Thaís Batista Arquitetura de Software – Thaís Batista

Padrões de Design
Resumo
19. Observer – Maneira de notificar mudança em várias
classes
20. State – Altera o comportamento de um objeto quando
seu estado muda.
21. Strategy – Encapsula um algoritmo dentro da classe
22. Template Method – Permite que subclasses definam
passos de um algoritmo sem mudar a estrutura do
mesmo
23. Visitor – Define uma nova operação para uma classe
sem mudar a classe

Arquitetura de Software – Thaís Batista

Você também pode gostar