Chain of Responsibility
1
Chain of Responsibility
• Definição: padrão cuja função principal é evitar o
acoplamento de um objeto remetente com o seu
objeto receptor.
• Solução:
1. Dar a mais de um objeto a chance de manipular a
mensagem (requisição).
2. Encadear os objetos receptores e passar a mensagem ao
longo da cadeia, até que um dos objetos da cadeia seja
capaz de responder à mensagem.
2
Estrutura do Chain of Responsibility
3
Chain of Responsibility - Participantes
• Handler
– define uma interface para manipulação de requisições
– (opcional) implementa a ligação entre os receptores
• ConcreteHandler
– Manipula requisições pelas quais é responsável
– Pode fazer accesso ao seu sucessor
– Se ConcreteHandler pode manipular a requisição, ele o faz;
senão, ele repassa a requisição para seu sucessor
• Client
– Inicia a requisição a um objeto ConcreteHandler da cadeia
4
Chain of Responsibility - Exemplo
• Correspondências no exemplo do DoFactory:
– Handler (Approver)
– ConcreteHandler (Director, VicePresident, President)
– Client (ChainApp)
5
Prototype
6
Prototype
• É utilizado para criar diversas cópias de um mesmo
objeto.
• Útil quando a criação de um objeto a partir do zero é
muito cara computacionalmente falando.
• Em vez de criar novas instâncias, crie cópias de
instâncias pré-existentes (protótipos) e modifique
essas cópias, conforme a necessidade.
• O protótipo criado é um clone do objeto original.
7
Estrutura do Prototype
8
Prototype - participantes
• Prototype
– Declara uma interace para clonar a si próprio
• ConcretePrototype
– implementa uma operação para clonar a si próprio. Essa
operação retorna um objeto da mesma classe e com os
mesmos valores de atributos to objeto protótipo utilizado.
• Client
– Cria um novo objeto através do envio de uma a requisição a
um protótipo para clonar a si próprio.
9
Bridge
10
Bridge
• O padrão Bridge permite desacoplar uma abstração
de sua implementação, de tal forma que as duas
possa variar independentemente uma da outra.
– Entenda abstração como uma interface.
– Note que em linguagens como Java, uma classe que
implemente uma interface fica acoplada a essa interface (A
implements B). O padrão Bridge permite eliminar essa
restrição.
11
Estrutura do Bridge
12
Bridge (Participantes)
• Abstraction
– Define a interface da abstração.
– Mantém uma referência para um objetos to tipo Implementor.
• RefinedAbstraction
– estende a interface definida por Abstraction.
• Implementor
– Define a interface para classes que implementam a abstração.
– Esta interface não precisa corresponder à interface de Abstraction; in fact the
two interfaces can be quite different.
– Tipicamente, a interface Implementation fornece somente operações básicas, e
Abstraction define operações de alto nível baseadas nessas primitivas.
• ConcreteImplementor
– Implementa a interface Implementor e define sua implementação concreta.
13
Builder
14
Builder
• O padrão Builder separa a construção de um objeto complexo
da sua representação de tal forma que o mesmo processo de
construção possa criar diferentes representações.
• Esse padrão é motivado pelo desejo de variar a representação
interna do produto que ele constrói e, ao mesmo tempo,
esconder detalhes acerca de como o produto é montado.
• O cliente instrui o objeto builder sobre como criar o objeto a
então solicita o resultado da criação.
• GOF: “is intended to decouple the process of building a
complex object from the parts that make up the object”
15
Builder - estrutura
16
Builder - participantes
• O padrão Builder tem dois participantes principais,
Director e Builder.
• O objeto Director, responsável pela organização geral
do objeto Product, faz chamadas ao Builder.
• O Builder constrói o objeto complexo, chamado de
Product, sob o controle do objeto Director.
17
Builder - aplicabilidade
• O padrão Builder pode ser aplicado em situações em que alguma coisa (o
produto) é formada (criada, construída) a partir de partes menores.
• O padrão criacional Builder permite que se varie a estrutura interna de um
produto, assim como a maneira como esse produto é montado.
• The Builder creational pattern lets you vary a product's
internal structure, as well as how it gets assembled.
Because you construct the object through an abstract
interface, you can define a new kind of builder for a product
to assemble it from different structures. The client need not
know anything about the construction process, nor the
parts that make up a product. You get a high degree of
control in the construction process.
18
Builder (exemplo livro GoF)
• Leitor para documentos RTF que exporta para vários formatos.
– Programa que converte RTF em outros formatos.
– Consiste de um Leitor/Parser e de um Conversor
– Dá suporte a diferentes conversões e formatos.
• Objetivos:
–
–
–
–
Deve ser possível adicionar um novo formato facilmente.
Separar o conversor do Leitor/Parser
Deve ser possível reutilizar o algoritmo do Leitor/Parser
O verdadeiro problema é que a quantidade de conversões em pontencial
é ilimitado.
– É desejável a possibilidade de adicionar uma nova conversão sem
modificar o leitor.
19
Builder (exemplo livro GoF)
• Cada classe conversora é chamada um BUILDER e a classe
leitora é o DIRECTOR.
– O padrão Builder separa o algoritmo para tratar um determinado
formato de como um arquivo convertido é criado e representado.
20
Download

Padrões GoF - Bridg.. - PUC-Rio