Escolar Documentos
Profissional Documentos
Cultura Documentos
BehavioralPatterns 82slides
BehavioralPatterns 82slides
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
umObjeto refernciaAObjeto
outroObjeto varivelDeInstncia
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
TEMPO
Padres Comportamentais(1/2)
Tratam de algoritmos e como atribuir responsabilidades entre objetos Interpreter ChainOf Command Responsibility
new
exec exec()
a
&
*
|
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres Comportamentais(2/2)
Tratam de algoritmos e como atribuir responsabilidades entre objetos State Strategy Observer(s)
TemplateMethod() a()
a() b()
b()
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres Comportamentais
Enquanto se concentram apenas na forma como os objetos so conectados, criam complexos fluxos de controle que so difceis de seguir em runtime. De Classe
baseados no uso de herana
De Objeto
baseados no uso de composio
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres Comportamentais
Chain of Responsibility - Encadeamento de Atendentes Command - Comando Interpreter Interpretador Iterator - Iterador Mediator - Mediador Memento - Lembrana Observer - Observador State - Estado Strategy - Estratgia Template Method Esqueleto de Mtodo Visitor - Visitante
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres Comportamentais
Chain of Responsibility - Encadeamento de Atendentes (Objeto) Evita acoplamento entre solicitantes e
atendentes permitindo que mais de um objeto tenha chance de tratar da solicitao. Encadeia os atendentes e passa a solicitao atravs desta cadeia at que algum deles a trate.
Padres Comportamentais
Iterator - Iterador (Objeto) Prov uma forma de acessar
seqencialmente os elementos de um agregado de objetos, sem expor a representao interna deste agregado.
Padres Comportamentais
Observer - Observador (Objeto) Define uma dependncia 1para-n entres objetos, de modo que quando o estado de um objeto alterado todos seus dependentes so notificados e atualizados automaticamente.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres Comportamentais
Template Method - Esqueleto de Mtodo (Classe)
Define o esqueleto de um algoritmo atravs de uma operao, deixando que subclasses refinem o restante do algoritmo. Permitem que subclasses redefinam certos aspectos de um algoritmo sem modificar a estrutura do algoritmo.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Chain of Responsibility
ChainOf Responsibility
Motivao
Considere, por exemplo, a construo de um conjunto de helps (auxlios) em uma GUI. Suponha que o usurio possa obter auxlio a partir de qualquer parte da interface pressionnando, F1. O help deve ento ser sensvel ao contexto onde foi ativado. Nestes casos torna-se natural criar vrios nveis de auxlio, se aplicando da situao mais especfica mais geral. Quando o contexto mais especfico no dispuser de auxlio, o contexto de auxlio imediatamente superior deve ser ativado. A idia do padro facilitar o desacoplamento entre o solicitante (boto onde foi invocado o help) e o atendente (janela de help ativada)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
ConcreteHandler1 handleRequest()
ConcreteHandler2 handleRequest()
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Flexibilidade na atribuio de responsabilidades para objetos (subclasses, alterao dinmica da cadeia) Sucesso no tratamento do pedido no garantido
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Class Component { .. public boolean postEvent(Event e) { if (handleEvent(e)) { e.consume(); return true; } Component parent = this.parent; ... if (parent != null) { ... if (parent.postEvent(e)) { e.consume(); return true; } } return false; } }
public class BancoApplet extends Applet { Button clientesButton, contasButton, crediteButton, debiteButton; public boolean handleEvent(Event evt) { if (evt.id == Event.ACTION_EVENT) { if (evt.target == clientesButton) { ... } else if (evt.target == contasButton) { ... } else if (evt.target == crediteButton) { ... } else if (evt.target == debiteButton) { ... } } else { return super.handleEvent(evt); } } }
Command
new
Padro Command
Inteno
Encapsula uma solicitao no interior de um objeto, permitindo que se parametrize clientes com diferentes solicitaes, filas ou registros de solicitaes, suportando ainda o cancelamento de solicitaes.
Motivao
Algumas vezes necessrio se fazer uma solicitao de servio sem conhecimento algum do tipo de operao que est sendo requerida. Na construo de um menu, por exemplo. O padro Command permite que um menu possa solicitar execuo de pedidos sem conhecer a natureza destes pedidos, pois o prprio objeto encapsula os detalhes da execuo do pedido.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Client
Invoker
Command execute()
Receiver action()
receiver
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Command
Colaboraes
aCommand = new Command
aReceiver
aClient
aCommand
anInvoker
StoreCommand(aCommand)
execute() action()
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Command
Aplicabilidade
Parametrizar objetos com uma ao a executar.
Tal parametrizao pode ser feita com funes de callback em linguagens imperativas. Comandos so um substituto orientado a objetos para callbacks.
Commands podem ser transferidos entre espaos de endereamento e mquinas. A operao execute pode armazenar o estado para reverter os efeitos do prprio comando. Atravs da incluso de undoable Commands em meio persistente.
Constitudas internamente por vrias operaes primitivas. Facilidades para extenso do sistema.
Padro Command
Conseqncias
Desacoplamento do objeto que invoca uma operao, do outro que executa esta operao Comandos so objetos, e como tal podem ser manipulados e refinados. Comandos podem ser compostos, criando MacroCommands fcil criar novos comandos.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Command
Exerccios
Veja a capacidade de suporte implementao dinmica do padro Command dentro dos pacotes java.lang e http://padct01:2001/java/lang/Object.html java.lang.reflect
Class java.lang.Class
Method[] getMethods();
Classe java.lang.reflect.Method
Object invoke(Object target, Object[] args);
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Interpreter
Interpreter
& a
*
| b c
Padro Interpreter
Inteno
Dada uma linguagem, cria uma representao para a gramtica da linguagem, juntamente com um interpretador que utilizar esta representao para interpretar sentenas na linguagem.
Motivao
Quando uma estrutura de problema particular ocorre vrias vezes, pode ser interessante represent-la atravs de uma sentena em uma linguagem simples, de modo a solucionar o problema atravs da construo de um interpretador para esta sentena. Em vrias destas situaes, em vez de construir algoritmos de interpretao manualmente, um interpretador genrico de expresses regulares pode solucionar o problema rapidamente. O padro Interpreter usa classes para representar cada regra de uma gramtica (expresso regular).
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Interpreter
Aplicabilidade
Use o Padro quando:
A gramtica simples
Para gramticas complexas a hierarquia de classes se torna difcil de gerenciar. Neste caso, geradores de parsers so uma alternativa melhor.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Interpreter
Conseqncias
fcil modificar e estender a gramtica Implementar a gramtica tambm fcil Gramticas complexas so difceis de manter Adicionar novas formas de interpretar expresses simples
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Iterator
Iterator
Motivao
Objetos agregados como listas, tabelas hash, dicionrios, etc, devem permitir que se acessem seus elementos de modo abstrato, sem que a representao interna de sua estrutura seja exposta Eventualmente tambm pode se desejar fazer duas travessias concorrentes sobre um mesmo objeto agregado. O padro Iterator permite a criao de tais facilidades.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
ConcreteAggregate createIterator()
ConcreteIterator
Padro Iterator
Aplicabilidade
Use o Padro Iterator quando:
Se deseja acessar o contedo de um objeto agregado sem expor sua representao interna Se deseja suportar mltiplas travessias de um objeto agregado Se quer prover uma interface uniforme para atravessar diferentes estruturas agregadas. Suportar iterao polimrfica
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Iterator
Conseqncias
Suporte a variaes na maneira de se atravessar um objeto agregado (pre-order, ps-ordem, em-ordem) Simplificao da interface do agregado Mais de um cursor pendente sobre um agregado
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Mediator
Mediator
Padro Mediator
Inteno
Define um objeto que encapsula o modo como um conjunto de objetos interage. Promove um acoplamento fraco entre objetos, evitando que referenciem diretamente um ao outro e permitindo que se possa variar a interao entre eles de modo independente.
Motivao
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Mediator
Aplicabilidade
Use o Padro Mediator quando:
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Mediator
Conseqncias
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Memento
Memento
Padro Memento
Inteno
Sem violar encapsulamento, captura e armazena externamente o estado de um objeto, de modo que o estado anterior de um objeto possa ser posteriormente restaurado.
Motivao
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Memento
Aplicabilidade
Use o Padro Memento quando:
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Memento
Conseqncias
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Observer
Observer(s)
Padro Observer
Inteno
Define uma dependncia 1-para-n entres objetos, de modo que quando o estado de um objeto alterado todos seus dependentes so notificados e atualizados automaticamente.
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Observer
Aplicabilidade
Use o Padro Observer em Algumas das Situaes:
Quando uma abstrao apresenta dois aspectos, um dependente do outro. Encapsulando estes aspectos em objetos separados permite que voc os varie e reutilize de forma independente Quando uma modificao em um objeto requer modificao em outros, e voc no sabe (em tempo de programao) quantos objetos precisam ser modificados Quando um objeto deve ser apto a notificar outros objetos sem saber quem so estes objetos. Em outras palavras, quando voc os quer fracamente acoplados
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Observer
Conseqncias
Variao independente de observveis e observadores fcil adicionar observadores sem modificar o observvel ou os outros observadores Suporte a comunicao broadcast Atualizaes inesperadas (caso o processo de notificao seja simplificado)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
State
State
Padro State
Inteno
Permite que um objeto altere seu comportamento quando seu estado interno se modifica. O objeto parecer ter mudado de classe.
Motivao
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro State
Aplicabilidade
Use o Padro State quando:
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro State
Conseqncias
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Strategy
Strategy
Padro Strategy
Inteno
Define uma famlia de algoritmos, encapsula cada um, e os faz intercambiveis. Permite que o algoritmo varie independentemente dos clientes que o utilizam.
Motivao
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Strategy
Aplicabilidade
Use o Padro Strategy quando:
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Strategy
Conseqncias
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Template Method
TemplateMethod() a()
a() b()
b()
Motivao
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Visitor
Padro Visitor
Inteno
Representa uma operao a ser executada sobre os elementos da estrutura de um objeto. Visitantes possibilitam a definio de novas operaes sem modificar as classes dos elementos sobre as quais ele atua.
Motivao
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Visitor
Aplicabilidade
Use o Padro Visitor quando:
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padro Visitor
Conseqncias
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Padres de Design Orientados a Objetos. Copyright 1999, 2003. Jorge H. C. Fernandes. (jorgehcfernandes@uol.com.br)
Memento
Definindo Travessias Evitando Histerese Composto Usando
Adapter
Proxy
Iterator
Enumerando Filhos
Bridge Command
Composite
Compartilhando Composies Adicionando Operaes Definindo Gramtica
Decorator
Modificando Pele versus Entranhas
Visitor
Adicionando Operaes
Definindo a Cadeia
Flyweight
Strategy
Interpreter
Compartilhando Terminais
Chain of Responsibility
Gerenciamento Complexo de Dependncias
Mediator Observer
State
Configurar Fbrica Dinamicamente
Template Method
Prototype
nica Instncia
Abstract Factory
nica Instncia
Factory Method
Singleton
Facade
Fim