padrões comportamentaisjhcf/mybooks/iess/patterns/...facade factory method observer mediator...

82
Padrões Comportamentais

Upload: others

Post on 21-Oct-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

  • Padrões Comportamentais

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Formulário para Descrição de Padrões

    �Nome e Classificação�Intenção�Também Conhecido

    Como�Motivação�Aplicabilidade

    �Estrutura�Participantes�Colaboradores�Conseqüências�Implementação�Exemplo de Código�Usos Conhecidos�Padrões

    Relacionados

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Notação de Classes e Objetos

    ClasseAbstrata

    operaçãoAbstrata()

    SubclasseConcreta1operação()

    variávelDeInstância

    referencia objetoagrega

    cria

    pseudo código

    ClasseConcretaummuitos

    umObjetoreferênciaAObjeto outroObjeto

    variávelDeInstância

    SubclasseConcreta2

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Diagrama de Interação de Objetos

    umObjetoop

    eraç

    ão a

    tiva

    sobr

    eo

    obje

    to

    TEM

    PO

    outroObjeto.método()this.método()

    outroObjeto

    outroObjeto = new Objeto()(instanciação)

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões Comportamentais(1/2)

    � Tratam de algoritmos e como atribuir responsabilidades entre objetos

    ChainOfResponsibility exec

    Command

    new

    exec()

    Interpreter&

    |

    b c

    a *

    Iterator

    Mediator Memento

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Observer(s)

    30%, 20%, 50%

    Padrões Comportamentais(2/2)

    � Tratam de algoritmos e como atribuir responsabilidades entre objetos

    Visitor

    State Strategy

    a() b()

    a() b()

    TemplateMethod()a(..);...b(..);

    Visitor Visitor

    30%, 10%, 60%

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões Comportamentais

    �Enquanto se concentram apenas na forma como os objetos são conectados, criam complexos fluxos de controle que são difíceis de seguir em runtime.

    �De Classe�baseados no uso de herança

    �De Objeto�baseados no uso de composição

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões Comportamentais

    � Chain of Responsibility- Encadeamento de Atendentes

    � Command - Comando� Interpreter -

    Interpretador� Iterator - Iterador� Mediator - Mediador

    � Memento - Lembrança � Observer - Observador� State - Estado� Strategy - Estratégia� Template Method -

    Esqueleto de Método� Visitor - Visitante

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões 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 solicitação. Encadeia os atendentes e passa a solicitação através desta cadeia até que algum deles a trate.

    � Command - Comando (Objeto) Encapsula uma solicitação no interior de um objeto, permitindo que se parametrize clientes com diferentes solicitações, filas ou registros de solicitações, suportando ainda o cancelamento de solicitações.

    � Interpreter - Interpretador (Classe) Dada uma linguagem, cria uma representação para a gramática da linguagem, juntamentecom um interpretador que utilizar esta representação para interpretar sentenças na linguagem.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões Comportamentais

    � Iterator - Iterador (Objeto) Provê uma forma de acessar seqüencialmente os elementos de um agregado de objetos, sem expor a representação interna deste agregado.

    � Mediator - Mediador (Objeto) 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 interação entre eles de modo independente.

    � Memento - Lembrança (Objeto) 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.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões Comportamentais

    � Observer - Observador (Objeto) Define uma dependência 1-para-n entres objetos, de modo que quando o estado de um objeto é alterado todos seus dependentes são notificados e atualizados automaticamente.

    � State - Estado (Objeto) Permite que um objeto altere seu comportamento quando seu estado interno se modifica. O objeto parecerá ter mudado de classe.

    � Strategy - Estratégia (Objeto) Define uma família de algoritmos, encapsula cada um, e os faz inter-cambiáveis. Permite que o algoritmo varie independentemente dos clientes que o utilizam.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrões Comportamentais

    � Template Method - Esqueleto de Método (Classe) Define o esqueleto de um algoritmo através de uma operação, deixando que subclasses refinem o restante do algoritmo. Permitem que subclasses redefinam certos aspectos de um algoritmo sem modificar a estrutura do algoritmo.

    � Visitor - Visitante (Objeto) Representa uma operação a ser executada sobre os elementos da estrutura de um objeto. Visitantes permitem que se definam novas operações sem modificar as classes dos elementos sobre as quais ele atua.

  • Chain of Responsibility

    ChainOfResponsibility

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Chain of Responsibility

    � Intenção�Evita acoplamento entre solicitantes e atendentes permitindo

    que mais de um objeto tenha chance de tratar da solicitação. Encadeia os atendentes e passa a solicitação através desta cadeia até que algum deles a trate.

    � Motivação� Considere, por exemplo, a construção de um conjunto de helps

    (auxílios) em uma GUI. � Suponha que o usuário possa obter auxílio a partir de qualquer parte

    da interface pressionnando, F1. O help deve então ser sensível ao contexto onde foi ativado.

    �Nestes casos torna-se natural criar vários níveis de auxílio, se aplicando da situação mais específica à mais geral.

    �Quando o contexto mais específico não dispuser de auxílio, o contexto de auxílio imediatamente superior deve ser ativado.

    � A idéia do padrão é facilitar o desacoplamento entre o solicitante (botão onde foi invocado o help) e o atendente (janela de help ativada)

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Client Handler

    handleRequest()

    ConcreteHandler2

    handleRequest()

    Padrão Chain of ResponsibilityEstrutura e Participantes

    ConcreteHandler1

    handleRequest()

    successor

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Chain of ResponsibilityAplicabilidade

    � Use o Padrão quando:�Mais de um objeto pode tratar de um pedido, e o tratador de

    pedidos (handler) não é conhecido a priori. O handler deve ser buscado automaticamente de forma ascendente.

    �Você quer emitir um pedido para um de vários objetos sem especificar o recebedor de forma explícita.

    �O conjunto de objetos que pode tratar de um pedido deve ser configurado dinamicamente.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Chain of ResponsibilityConseqüências

    � Acoplamento reduzido�Evita que um objeto (client) seja forçado a tomar conhecimento

    do outro (handler)�O objeto só precisa saber que o pedido foi tratado

    apropriadamente�A estrutura da cadeia não precisa ser conhecida

    � Flexibilidade na atribuição de responsabilidades para objetos (subclasses, alteração dinâmica da cadeia)

    � Sucesso no tratamento do pedido não é garantido

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Chain of ResponsibilityExercícios

    � Observe os trechos de código das próximas 2 páginas e veja como funciona a Chain of Responsibility do tratamento de eventos no AWT 1.0.

    � Veja também detalhes do código fonte das classes Component�Método handleEvent() e suas várias ramificações.

  • 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

    execCommand

    new

    exec()

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Command

    � Intenção�Encapsula uma solicitação no interior de um objeto, permitindo que se

    parametrize clientes com diferentes solicitações, filas ou registros de solicitações, suportando ainda o cancelamento de solicitações.

    � Motivação�Algumas vezes é necessário se fazer uma solicitação de serviço

    sem conhecimento algum do tipo de operação que está sendo requerida.

    �Na construção de um menu, por exemplo.�O padrão Command permite que um menu possa solicitar

    execução de pedidos sem conhecer a natureza destes pedidos, pois o próprio objeto encapsula os detalhes da execução do pedido.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    receiver.action();

    Client

    Receiver

    action()ConcreteCommand

    execute()

    Command

    execute()

    Padrão CommandEstrutura e Participantes

    state

    Invoker

    receiver

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão CommandColaborações

    anInvokeraCommandaClientaReceiver

    aCommand = new Command

    StoreCommand(aCommand)

    execute()action()

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão CommandAplicabilidade

    � Parametrizar objetos com uma ação a executar. � Tal parametrização pode ser feita com funções de callback em

    linguagens imperativas. Comandos são um substituto orientado a objetos para callbacks.

    � Especificar, armazenar e executar pedidos em momentos diferentes. � Commands podem ser transferidos entre espaços de endereçamento e

    máquinas.� Suportar undo

    � A operação execute pode armazenar o estado para reverter os efeitos do próprio comando.

    � Suportar ‘logs’ de modificações� Através da inclusão de undoable Commands em meio persistente.

    � Estruturar um sistema em torno de operações de alto nível� Constituídas internamente por várias operações primitivas. Facilidades

    para extensão do sistema.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão CommandConseqüências

    � Desacoplamento do objeto que invoca uma operação, do outro que executa esta operação

    � Comandos são objetos, e como tal podem ser manipulados e refinados.

    � Comandos podem ser compostos, criando MacroCommands

    � É fácil criar novos comandos.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão CommandExercícios

    � Veja a capacidade de suporte à implementação dinâmica do padrão Command dentro dos pacotes java.lang e java.lang.reflect�Class java.lang.Class

    ⌧Method[] getMethods();

    �Classe java.lang.reflect.Method⌧Object invoke(Object target, Object[] args);

    http://padct01:2001/java/lang/Object.html

  • Interpreter

    Interpreter&

    |

    b c

    a *

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Interpreter

    � Intenção�Dada uma linguagem, cria uma representação para a gramática da

    linguagem, juntamente com um interpretador que utilizar esta representação para interpretar sentenças na linguagem.

    � Motivação�Quando uma estrutura de problema particular ocorre várias vezes,

    pode ser interessante representá-la através de uma sentença em uma linguagem simples, de modo a solucionar o problema através da construção de um interpretador para esta sentença.

    � Em várias destas situações, em vez de construir algoritmos de interpretação manualmente, um interpretador genérico de expressões regulares pode solucionar o problema rapidamente.

    �O padrão Interpreter usa classes para representar cada regra de uma gramática (expressão regular).

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão InterpreterAplicabilidade

    � Use o Padrão quando:�A gramática é simples

    ⌧Para gramáticas complexas a hierarquia de classes se torna difícil de gerenciar. Neste caso, geradores de parsers são uma alternativa melhor.

    �Eficiência não é uma questão crítica⌧Código intermediário permite maior eficiência⌧Expressões podem ser traduzidas para máquinas de estado finito⌧Neste casos, o tradutor pode ser criado através de um interpreter

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão InterpreterConseqüências

    � É fácil modificar e estender a gramática� Implementar a gramática também é fácil� Gramáticas complexas são difíceis de manter� Adicionar novas formas de interpretar expressões é

    simples

  • Iterator

    Iterator

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Iterator (Cursor)

    � Intenção�Provê uma forma de acessar seqüencialmente os elementos de um

    agregado de objetos, sem expor a representação interna deste agregado.

    � Motivação�Objetos agregados como listas, tabelas hash, dicionários, etc,

    devem permitir que se acessem seus elementos de modo abstrato, sem que a representação interna de sua estrutura seja exposta

    �Eventualmente também pode se desejar fazer duas travessias concorrentes sobre um mesmo objeto agregado.

    �O padrão Iterator permite a criação de tais facilidades.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Return new ConcreteIterator(this);

    ClientAggregate

    createIterator()

    ConcreteAggregate

    createIterator()

    Padrão IteratorEstrutura e Participantes

    Iterator

    first()next()isDone()currentItem()

    ConcreteIterator

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão IteratorAplicabilidade

    � Use o Padrão Iterator quando:�Se deseja acessar o conteúdo de um objeto agregado sem

    expor sua representação interna�Se deseja suportar múltiplas travessias de um objeto agregado�Se quer prover uma interface uniforme para atravessar

    diferentes estruturas agregadas. Suportar iteração polimórfica

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão IteratorConseqüências

    � Suporte a variações na maneira de se atravessar um objeto agregado (pre-order, pós-ordem, em-ordem)

    � Simplificação da interface do agregado� Mais de um cursor pendente sobre um agregado

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão IteratorExercícios

    � Observar o uso de agregados no pacote java.util.�JDK 1.1 - Hashtable, Vector, Enumeration�JDK 1.2 - Collection, Iterator

    Hash Table Resizable Array Balanced Tree Linked List

    HashSet TreeSet

    ArrayList LinkedList

    HashMap TreeMap

    Set

    List

    Map

    IMPLEMENTAÇÕES - JDK 1.2

    INTE

    RFA

    CES

  • Mediator

    Mediator

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Mediator

    � Intenção�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 interação entre eles de modo independente.

    � Motivação

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MediatorEstrutura e Participantes

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MediatorAplicabilidade

    � Use o Padrão Mediator quando:

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MediatorConseqüências

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MediatorExercícios

  • Memento

    Memento

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Memento

    � Intenção�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.

    � Motivação

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MementoEstrutura e Participantes

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MementoAplicabilidade

    � Use o Padrão Memento quando:

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MementoConseqüências

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão MementoExercícios

  • Observer

    Observer(s)

    30%, 20%, 50%30%, 10%, 60%

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Observer

    �Intenção�Define uma dependência 1-para-n entres

    objetos, de modo que quando o estado de um objeto é alterado todos seus dependentes são notificados e atualizados automaticamente.

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão ObserverMotivação

    � Suponha que você deseja fornecer várias visões distintas de um mesmo objeto que funciona como um repositório de dados

    � Cada visão é criada por um objeto observador independente

    � Caso cada observador seja diretamente conectado ao repositório, isto criará uma dependência do repositório com relação aos diferentes observadores, o que lhe reduzirá a reusabilidade e flexibilidade

    � O padrão Observer descreve uma forma de manutenção destes relacionamentos de modo que observadores e repositórios sejam facilmente substituídos

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão ObserverEstrutura e Participantes

    return subjectState

    Subject

    attach(Observer)

    Observer

    update()detach(Observer)notify() For all o in observers {

    o.update();}

    observerState = subject.getState();

    ConcreteSubject

    getState()

    subjectState

    ConcreteObserver

    update()

    observerState

    subject

    observers

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão ObserverAplicabilidade

    � Use o Padrão Observer em Algumas das Situações:�Quando uma abstração 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 modificação em um objeto requer modificação em outros, e você não sabe (em tempo de programação) quantos objetos precisam ser modificados

    �Quando um objeto deve ser apto a notificar outros objetos sem saber quem são estes objetos. Em outras palavras, quando você os quer fracamente acoplados

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão ObserverConseqüências

    �Variação independente de observáveis e observadores

    �É fácil adicionar observadores sem modificar o observável ou os outros observadores

    �Suporte a comunicação broadcast�Atualizações inesperadas (caso o processo

    de notificação seja simplificado)

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão ObserverExercícios

    � Veja a implementação do padrão observer nos componentes do pacote AWT

    � Destaque as diferenças entre o padrão original e a implementação do AWT

  • State

    State

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão State

    � Intenção�Permite que um objeto altere seu comportamento quando seu estado

    interno se modifica. O objeto parecerá ter mudado de classe.

    � Motivação

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StateEstrutura e Participantes

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StateAplicabilidade

    � Use o Padrão State quando:

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StateConseqüências

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StateExercícios

  • Strategy

    Strategy

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Strategy

    � Intenção�Define uma família de algoritmos, encapsula cada um, e os faz inter-

    cambiáveis. Permite que o algoritmo varie independentemente dos clientes que o utilizam.

    � Motivação

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StrategyEstrutura e Participantes

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StrategyAplicabilidade

    � Use o Padrão Strategy quando:

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StrategyConseqüências

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão StrategyExercícios

  • Template Method

    a() b()

    a() b()

    TemplateMethod()a(..);...b(..);

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Template Method

    � Intenção�Define o esqueleto de um algoritmo através de uma operação,

    deixando que subclasses refinem o restante do algoritmo. Permitem que subclasses redefinam certos aspectos de um algoritmo sem modificar a estrutura do algoritmo.

    � Motivação

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Template MethodEstrutura e Participantes

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Template MethodAplicabilidade

    � Use o Padrão TemplateMethod quando:

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Template MethodConseqüências

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Template MethodExercícios

  • Visitor

    Visitor Visitor Visitor

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão Visitor

    � Intenção�Representa uma operação a ser executada sobre os elementos da

    estrutura de um objeto. Visitantes possibilitam a definição de novas operações sem modificar as classes dos elementos sobre as quais ele atua.

    � Motivação

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão VisitorEstrutura e Participantes

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão VisitorAplicabilidade

    � Use o Padrão Visitor quando:

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão VisitorConseqüências

  • Padrões de Design Orientados a Objetos. Copyright © 1999, 2003. Jorge H. C. Fernandes. ([email protected])

    Padrão VisitorExercícios

  • State

    Memento Adapter Proxy

    Bridge

    Command

    Chain of Responsibility

    Singleton

    Abstract Factory

    Prototype

    Template Method

    Facade

    Factory Method

    Observer

    MediatorStrategy

    Decorator

    Flyweight

    Composite

    Interpreter

    Visitor

    Iterator

    Builder

    Uma Linguagem de Padrões para Programas OO

    AdicionandoOperações

    AdicionandoOperações

    EnumerandoFilhos

    SalvandoEstado da Operação

    CriandoComposições

    AdicionandoResponsabilidades

    a Objetos

    Modificando Peleversus Entranhas

    CompartilhandoComposições

    DefinindoGramática

    DefinindoTravessias

    Definindoa Cadeia

    CompostoUsando

    EvitandoHisterese

    CompartilhandoEstratégias

    CompartilhandoEstados Compartilhando

    Terminais

    ConfigurarFábrica

    Dinamicamente

    ÚnicaInstância

    ÚnicaInstância

    ImplementadaUsando

    GerenciamentoComplexo deDependências

    Freqüentemente Usa

    DefinindoPassos doAlgoritmo

  • Fim