Facade/Façade/Fachada
• Provê uma interface unificada para um
conjunto de interfaces em um subsitema.
• Facade ou Façade ou Fachada define
uma interface de mais alto nível, que torna
o subsistema mais fácil de se usar
2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Motivação
• Estruturar um sistema em subsistemas
ajuda a reduzir a complexidade
– Um objetivo de projeto comum é minimizar a
comunicação e as dependências entre
subsistemas.
• Uma forma de se alcançar isto é introduzindo um
objeto FACADE, que provê uma interface única e
simplificada às facilidades mais gerais de um
subsistema
3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Motivação
4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Façade
• Suponha um sub-
sistema (conjunto de
pacotes e classes)
que trabalham em
conjunto para prover
funcionalidade a
clientes (ex: GUI ou
Iterators)
• Para obter esta
funcionalidade
desejada, cada cliente
terá que interagir com
um conjunto de classe
deste subsistema
5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Façade
• Problemas:
– Se houver
manutenções nas
classes do sub-
sistema, os clientes
serão afetados.
– Acoplamento Forte
– Dificuldade de
manutenção e
extensão
6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Façade
• Solução
– Implementar um
classe Façade
– Façade atua
na intermediação
(orquestração,
coordenação) da
funcionalidade
desejada pelo
cliente
– Classe Façade é uma interface de alto nível
(provedor de serviços), ou seja, abstrai o detalhes do
sub-sistema para os clientes.
7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Façade
• Vantagens:
– Mudanças na classes
podem afetar façade mas
não o cliente
– Diminuição do
acoplamento do cliente
com a classes do
subsistema
– Cliente usa o serviço do
façade e não acopla-se
diretamente com a
implementação do serviço
(classes do sub-sistema)
8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Motivação – Compiler Facade
9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Aplicação
• Use Façade quando:
– Deseja-se prover uma interface simples para um
sistema complexo (útil para a maioria dos clientes...)
– Há muitas dependências entre clientes e as classes
de implementação de uma abstração. Introduz-se um
façade para desacoplá-los (independência e
portabilidade)
– Deseja-se “estruturar em camadas” seus subsistemas
(façade define um ponto de entrada para cada nível)
10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Estrutura
11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Participantes
• Façade (Compiler)
– Conhece quais classes de um subsistema são
responsáveis por uma requisição
– Delega as requisições de clientes para os objetos
apropriados do subsistema
• Classes do Subsistema (Scanner, Parser,
ProgramNode etc)
– Implementam a funcionalidade do subsistema
– Realizam o trabalho atribuído pelo objeto Façade
– Desconhecem o Façade, isto é, não possuem
referências a ele
12 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Colaborações
• Clientes se comunicam com o subsistema
enviando requisições ao Façade, que as
direcionam aos objetos apropriados do
subsistema
• Embora os objetos do subsistema realizem o
trabalho real, pode ser que o Façade tenha que
fazer a “tradução” da sua interface para as do
subsistema
• Clientes que usam o Façade não têm que
acessar os objetos do subsistema diretamente
13 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Conseqüências
• Benefícios:
1. Separa clientes dos componentes do subsistema,
reduzindo o número de objetos que os clientes
lidam e tornando o subsistema mais fácil de se usar
2. Promove acoplamento fraco entre o subsistema e
seus clientes.
• Acoplamento fraco permite que se mude os componentes
de um subsistema sem afetar seus clientes.
• Além de ajudar a reduzir as dependências
3. Não impede que aplicações usem diretamente as
classes do subsistema, caso necessário
14 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
• Suponha uma aplicação com os seguintes
requisitos
– Recebe dados de um cliente (conta, endereço
e cartão de crédito) por meio de um FORM
– Valida as entradas
– Grava os dados nos arquivos apropriados
• Para validar dos dados, há classes Conta,
Endereço e Cartão de Crédito
15 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
FORM Cliente
16 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
Seqüência
1. Instancia os três objetos com os dados
digitados no FORM
2. Valida estes dados, usando métodos
destes objetos - isValid()
3. Grava os dados nos arquivos, usando
métodos destes objetos – save()
17 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
Sem Façade
1. Objeto FORM deverá instanciar cada um dos
objetos (Conta, Endereço e Cartão de Crédito) e
coordenar a seqüência de chamadas aos
métodos isValid() e save() destes três objetos
2. Mudanças (ex. alterar a assinatura do método
save() ou inclusão de mais dados no FORM que
implicam em novo objeto para validação)
implicará em alteração do objeto FORM
18 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
Com Façade
1. Objeto FORM instancia o Façade e passa
como parâmetro os dados da tela ao Façade
por meio dos setters nele implementados
2. Façade declara método saveCustomerData(),
que instância os objetos de validação (Conta,
Endereço e Cartão de Crédito) e coordena as
chamadas ao isValid() Save() dos objetos,
retornando true ou false.
3. Neste caso, mudanças de requisitos
implicarão maiores modificações no Façade
(pode requerer novos setters) e não no FORM
19 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
20 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
21 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
22 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Implementação
• Considere as seguintes questões ao
implementar:
– Reduzir o acoplamento entre clientes e
subsistema
• Eventualmente, fazendo o Façade uma classe
abstrata com subclasses concretas para diferentes
implementações de um subsistema
– Classes de subsistema públicas versus
privadas
• Façade é parte da interface pública do subsistema
23 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
• Um facade em um subsistema compilador:
24 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
25 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
26 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
27 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
28 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
29 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Exemplo
30 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja
Mais sobre Façade
• Por ser portar como uma interface de um
sub-sistema, Façade pode oferecer vários
serviços aos objetos clientes e não apenas
um serviço, como mostram os dois
exemplos.
31 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma Ivan Granja