SlideShare uma empresa Scribd logo
PADRÃO FACHADA
Fachada
  Alteração de um interface com a intenção de
simplificá-la
  Oculta a complexidade de um conjunto de
classes
Imagine um HomeTheater
HomeTheater
  Muitas classes
  Muitas interações
  Você precisa saber o
funcionamento de tudo
para saber usar
corretamente
Para assistir um filme
1.  Ligar a máquina de pipoca
2.  Colocar a máquina de pipoca em funcionamento
3.  Reduzir as luzes
4.  Baixar a tela
5.  Ligar o projetor
6.  Congurar a entrada do projeto para DVD
7.  Colocar o projetor em modo wide-screen
8.  Ligar o amplicador de áudio
9.  Congurar a entrada do amplicador para DVD
10.  Congurar o amplicador para surround
11.  Ajustar o amplicador para o volume médio (5)
12.  Ligar o DVD Player
13.  Acionar o play no DVD Player
Para assistir um filme
Em Java
1.  Ligar a máquina de pipoca
2.  Colocar a máquina de pipoca em
funcionamento
3.  Reduzir as luzes
4.  Baixar a tela
5.  Ligar o projetor
6.  Configurar a entrada do projeto para DVD
7.  Colocar o projetor em modo wide-screen
8.  Ligar o amplificador de áudio
9.  Configurar o amplificador para DVD
10.  Configurar o amplificador para surround
11.  Ajustar o amplificador para o volume médio
12.  Ligar o DVD Player
13.  Acionar o play no DVD Player
pipoqueira.ligar();
pipoqueira.cozinhar();
luz.dim(10);
tela.descer();
projetor.ligar();
projetor.setInput(dvdPlayer);
projetor.modoWideSreen();
amplificador.ligar();
amplificador.setDVD(dvdPlayer);
amplificador.setSurroundAudio();
amplificador.setVolume(5);
dvdPlayer.ligar();
dvdPlayer.play(filme);
+ Problemas
  Neste tipo de situação ainda há uma ordem
para fazer tudo
  Ao final pode-se precisar fazer as ações em
ordem inversa
  E para ouvir um CD ou rádio?
  Se precisar atualizar o sistema terá que
aprender um novo algoritmo
Solução para a complexidade
  A FACHADA
A Fachada
  Uma classe que exponha somente alguns
métodos simples
  assistirFilme()
  pararFilme()
  Trata os componentes do Home Theater como
um subsistema
  Aciona as diversas partes necessárias para
implementar o método assistirFilme()
A Fachada
  O cliente assim pode usar os métodos da
Fachada e não do subsistema
  Para assistir um filme basta acionar um
método que se comunica com todo o
subsistema
Solução para a complexidade
  A FACHADA
A Fachada
  Preserva o acesso direto ao subsistema
  Você ainda pode usar os métodos de cada
aparelho
Implementando a Fachada
public class HomeTheaterFacade {
Amplificador amplificador;
Sintonizador sintonizador;
CDPlayer cdPlayer;
DVDPlayer dvdPlayer;
Projetor projetor;
LuzAmbiente luz;
Tela tela;
Pipoqueira pipoqueira;
/**
* Construtor
*/
public HomeTheaterFacade(
Amplificador amplificador,
Sintonizador sintonizador,
CDPlayer cdPlayer,
DVDPlayer dvdPlayer,
Projetor projetor,
LuzAmbiente luz,
Tela tela,
Pipoqueira pipoqueira) {
this.amplificador = amplificador;
this.sintonizador = sintonizador;
this.cdPlayer = cdPlayer;
this.dvdPlayer = dvdPlayer;
this.projetor = projetor;
this.luz = luz;
this.tela = tela;
this.pipoqueira = pipoqueira;
}
Implementando a Fachada
/**
* Método que simplifica o uso de vários objetos
* @param filme
*/
public void assistirFilme(Filme filme) {
System.out.println(
"Tudo ok para assistir um filme!");
pipoqueira.ligar();
pipoqueira.cozinhar();
luz.dim(10);
tela.descer();
projetor.ligar();
projetor.setInput(dvdPlayer);
projetor.modoWideSreen();
amplificador.ligar();
amplificador.setDVD(dvdPlayer);
amplificador.setSurroundAudio();
amplificador.setVolume(5);
dvdPlayer.ligar();
dvdPlayer.play(filme);
}
/**
* Outro método que simplifica
* um conjunto de tarefas
*/
public void pararFilme(){
System.out.println("Desligando o
home...");
pipoqueira.desligar();
luz.ligar();
tela.subir();
projetor.desligar();
amplificador.desligar();
dvdPlayer.parar();
dvdPlayer.eject();
dvdPlayer.desligar();
}
Fachada
Para assistir um filme
de maneira simplificada
public class TesteHomeTheater {
public static void main(String[] args) {
//Criação das instâncias dos componentes
HomeTheaterFacade ht =
new HomeTheaterFacade(amplificador,
sintonizador, cdPlayer,dvdPlayer, projetor,
luz, tela, pipoqueira);
ht.assistirFilme(filme);
ht.pararFilme();
}
}
Questões sobre a fachada
  Encapsula as classes do sistema?
  Acrescenta funcionalidade?
  Cada subsistema possui somente um fachada?
  Qual o benefício da fachada além de fornecer
uma interface simples?
  Qual a diferença da Fachada para o
Adaptador?
Um pouco mais
  Além de simplificar uma interface
  Desconecta o cliente de um subsistema de
componentes
  Uma fachada simplifica e um adapter converte
uma interface para algo diferente
+1 Padrão
FACADE
O Padrão Facade fornece uma interface
unificada para um conjunto de interfaces em
um subsistema. A Fachada define uma
interface de nível mais alto que facilita a
utilização de um subsistema.
Diagrama de classes
Participantes
  Fachada
  Conhece quais as classes do subsistema são
responsáveis pelo atendimento de uma solicitação
  Classes de Subsistema
  Implementam a funcionalidade do subsistema
  Encarregam-se do trabalho atribuído a elas pelo
objeto Fachada
  Não têm conhecimento da Fachada, ou seja, não
possuem referência para a mesma
Colaborações
  Os clientes se comunicam com um subsistema
através do envio de solicitações para a
Fachada, a qual repassa para os objetos
apropriados do subsistema. Embora os objetos
do subsistema executem o trabalho real, a
fachada pode ter que efetuar trabalho próprio
dela para traduzir a sua interface para as
interfaces do subsistema
  Os clientes que usam a fachada não têm que
acessar os objetos do subsistema diretamente
Princípio de Design
  “Princípio do Mínimo Conhecimento – só
interaja com seus amigos mais próximos.”
  Ter cuidado com o número de classes com que
qualquer objeto interage e também com a forma
como essa interação ocorre
  Minimizar o acoplamento entre classes
  Evita um efeito em cascata quando houver alterações
em um sistema
Princípio de Design
  Mínimo Conhecimento (Lei de Demétrio)
  Em um determinado objeto, a partir de qualquer
método do mesmo, só podemos invocar métodos
que pertençam:
  Ao próprio objeto
  A objetos que tenham sido passados como parâmetros
para o método
  A qualquer objeto que seja criado ou instanciado pelo
método
  A qualquer componente do objeto
Princípio de Design
  SEM o uso do princípio
public float getTemperatura() {
Termometro t = estacao.getTermometro();
return t.getTemperatura();
}
Princípio de Design
  COM o uso do princípio
public float getTemperatura() {
return estacao.getTemperatura();
}
Princípio de Design
  Uma classe em conformidade com o princípio
public class Carro {
Motor motor;
public Carro() {
}
public void ligar(Chave chave) {
Portas portas = new Portas();
boolean autorizado = chave.virar();
motor.ligar();
atualizarVisorDoCarro();
portas.trancar();
}
private void atualizarVisorDoCarro() {
// TODO Auto-generated method stub
}
}
Princípio de Design
  Desvantagens
  Maior número de classes que envolvem outras
classes, isto pode gerar:
  Aumento de complexidade
  Aumento no tempo de desenvolvimento de software
  Redução de desempenho
Princípio de Design
X Fachada

Mais conteúdo relacionado

PDF
Guia DVD Flick
PDF
Desenho animado
DOC
Criandofilmes
PDF
Tutorial movie maker
ODT
Criandofilmes
PPT
Tutorial movie-maker-1228496537221274-8 (1)
DOC
06 breve histórico do action script - Flash 8
PDF
Quando? O Tempo no Design de Interação
Guia DVD Flick
Desenho animado
Criandofilmes
Tutorial movie maker
Criandofilmes
Tutorial movie-maker-1228496537221274-8 (1)
06 breve histórico do action script - Flash 8
Quando? O Tempo no Design de Interação

Destaque (20)

PDF
Desenho arquitetônico
PDF
Padroes De Projeto
PDF
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010
PPT
Padrão de Projetos singleton
PDF
Boas práticas no desenvolvimento de software
PDF
Proposta de Boas Práticas e Padrões de Desenvolvimento Web
PDF
Introducao - Engenharia de Software
PDF
Html - Aula 3
PDF
G gpcwmlguth 02.009.030.004-video_dvr_-_internet
PDF
# Dvr stand alone maxstand 2 em 1
PDF
Boas práticas de django
PDF
Padrões-12 - Padrões Estruturais - Facade
PDF
Evolução de software 1 - Engenharia de Software
PDF
Apostila `profissional cftv
PDF
Guia do cftv básico
PDF
Padrões-02 - Padrões Arquiteturais - Camadas
PDF
Desenvolvimento agil de_software
PDF
Fábrica Simples - Padrões de Projeto
PDF
Html Aula 1 Parte 1
PDF
Html - Aula 4
Desenho arquitetônico
Padroes De Projeto
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010
Padrão de Projetos singleton
Boas práticas no desenvolvimento de software
Proposta de Boas Práticas e Padrões de Desenvolvimento Web
Introducao - Engenharia de Software
Html - Aula 3
G gpcwmlguth 02.009.030.004-video_dvr_-_internet
# Dvr stand alone maxstand 2 em 1
Boas práticas de django
Padrões-12 - Padrões Estruturais - Facade
Evolução de software 1 - Engenharia de Software
Apostila `profissional cftv
Guia do cftv básico
Padrões-02 - Padrões Arquiteturais - Camadas
Desenvolvimento agil de_software
Fábrica Simples - Padrões de Projeto
Html Aula 1 Parte 1
Html - Aula 4
Anúncio

Semelhante a Padrão Fachada (20)

PPTX
Design fachada e Método Gabarito
PDF
Criando Webservice REST com NodeJS, NoSQL & Docker
PDF
DVD LAB PRO - Tutorial
PPT
PPTX
Applets e Java web start
KEY
Oficina Puppet - Aprenda a Gerenciar Configurações
PPTX
Maven 3, Sonar e Hudson
PDF
Introdução ao android - siecomp 2015.1
PPT
Minicurso Play Framework - Tão fácil que nem parece Java
PDF
2017 08-11 - Androidos V - Minicurso - Introdução ao android
PDF
Ubuntu COMSOLiD 5
PDF
O guia passo_a_passo
PPT
Apresentacao projetorle4
PPTX
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
PPTX
Soluções de Streaming para igrejas
PPT
Apresentação aptana
PPTX
Maven em 10 minutos
PPT
Padroes de projetos gof
PDF
Android Aula 4
Design fachada e Método Gabarito
Criando Webservice REST com NodeJS, NoSQL & Docker
DVD LAB PRO - Tutorial
Applets e Java web start
Oficina Puppet - Aprenda a Gerenciar Configurações
Maven 3, Sonar e Hudson
Introdução ao android - siecomp 2015.1
Minicurso Play Framework - Tão fácil que nem parece Java
2017 08-11 - Androidos V - Minicurso - Introdução ao android
Ubuntu COMSOLiD 5
O guia passo_a_passo
Apresentacao projetorle4
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
Soluções de Streaming para igrejas
Apresentação aptana
Maven em 10 minutos
Padroes de projetos gof
Android Aula 4
Anúncio

Mais de Eduardo Mendes (20)

PDF
JavaScript - Introdução com Orientação a Objetos
PDF
AngularJS - Rotas
PDF
Angular JS - Fundamentos
PDF
Singleton - Padrão de Projeto
PDF
Layout Fluido
PDF
Web Design Responsivo
PDF
Introdução à Internet, Http e HTML
PDF
PDF
Jquery 2
PDF
PDF
Estimativas de Esforço - Engenharia de Software
PDF
Java web 6 JSP Expression Language Taglib parte 2
PDF
Validações no Ruby on Rails
PDF
Padrão Iterator
PDF
Padroes Template-Method (Método Gabarito)
PDF
Padrão Command
PDF
Padrão Adapter
PDF
Web Design Responsivo
PDF
PHP básico para iniciantes
PDF
PHP e MySQL para iniciantes
JavaScript - Introdução com Orientação a Objetos
AngularJS - Rotas
Angular JS - Fundamentos
Singleton - Padrão de Projeto
Layout Fluido
Web Design Responsivo
Introdução à Internet, Http e HTML
Jquery 2
Estimativas de Esforço - Engenharia de Software
Java web 6 JSP Expression Language Taglib parte 2
Validações no Ruby on Rails
Padrão Iterator
Padroes Template-Method (Método Gabarito)
Padrão Command
Padrão Adapter
Web Design Responsivo
PHP básico para iniciantes
PHP e MySQL para iniciantes

Último (20)

PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Émile Durkheim slide elaborado muito bom
PPTX
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Aula sobre desenvolvimento de aplicativos
PPTX
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Aula sobre banco de dados com firebase db
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PPTX
Curso de Java 9 - (Threads) Multitarefas.pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Émile Durkheim slide elaborado muito bom
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Apple Pippin Uma breve introdução. - David Glotz
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula sobre desenvolvimento de aplicativos
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula sobre banco de dados com firebase db
Custos e liquidação no SAP Transportation Management, TM130 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
Curso de Java 9 - (Threads) Multitarefas.pptx

Padrão Fachada

  • 2. Fachada   Alteração de um interface com a intenção de simplificá-la   Oculta a complexidade de um conjunto de classes
  • 4. HomeTheater   Muitas classes   Muitas interações   Você precisa saber o funcionamento de tudo para saber usar corretamente
  • 5. Para assistir um filme 1.  Ligar a máquina de pipoca 2.  Colocar a máquina de pipoca em funcionamento 3.  Reduzir as luzes 4.  Baixar a tela 5.  Ligar o projetor 6.  Congurar a entrada do projeto para DVD 7.  Colocar o projetor em modo wide-screen 8.  Ligar o amplicador de áudio 9.  Congurar a entrada do amplicador para DVD 10.  Congurar o amplicador para surround 11.  Ajustar o amplicador para o volume médio (5) 12.  Ligar o DVD Player 13.  Acionar o play no DVD Player
  • 6. Para assistir um filme Em Java 1.  Ligar a máquina de pipoca 2.  Colocar a máquina de pipoca em funcionamento 3.  Reduzir as luzes 4.  Baixar a tela 5.  Ligar o projetor 6.  Configurar a entrada do projeto para DVD 7.  Colocar o projetor em modo wide-screen 8.  Ligar o amplificador de áudio 9.  Configurar o amplificador para DVD 10.  Configurar o amplificador para surround 11.  Ajustar o amplificador para o volume médio 12.  Ligar o DVD Player 13.  Acionar o play no DVD Player pipoqueira.ligar(); pipoqueira.cozinhar(); luz.dim(10); tela.descer(); projetor.ligar(); projetor.setInput(dvdPlayer); projetor.modoWideSreen(); amplificador.ligar(); amplificador.setDVD(dvdPlayer); amplificador.setSurroundAudio(); amplificador.setVolume(5); dvdPlayer.ligar(); dvdPlayer.play(filme);
  • 7. + Problemas   Neste tipo de situação ainda há uma ordem para fazer tudo   Ao final pode-se precisar fazer as ações em ordem inversa   E para ouvir um CD ou rádio?   Se precisar atualizar o sistema terá que aprender um novo algoritmo
  • 8. Solução para a complexidade   A FACHADA
  • 9. A Fachada   Uma classe que exponha somente alguns métodos simples   assistirFilme()   pararFilme()   Trata os componentes do Home Theater como um subsistema   Aciona as diversas partes necessárias para implementar o método assistirFilme()
  • 10. A Fachada   O cliente assim pode usar os métodos da Fachada e não do subsistema   Para assistir um filme basta acionar um método que se comunica com todo o subsistema
  • 11. Solução para a complexidade   A FACHADA
  • 12. A Fachada   Preserva o acesso direto ao subsistema   Você ainda pode usar os métodos de cada aparelho
  • 13. Implementando a Fachada public class HomeTheaterFacade { Amplificador amplificador; Sintonizador sintonizador; CDPlayer cdPlayer; DVDPlayer dvdPlayer; Projetor projetor; LuzAmbiente luz; Tela tela; Pipoqueira pipoqueira; /** * Construtor */ public HomeTheaterFacade( Amplificador amplificador, Sintonizador sintonizador, CDPlayer cdPlayer, DVDPlayer dvdPlayer, Projetor projetor, LuzAmbiente luz, Tela tela, Pipoqueira pipoqueira) { this.amplificador = amplificador; this.sintonizador = sintonizador; this.cdPlayer = cdPlayer; this.dvdPlayer = dvdPlayer; this.projetor = projetor; this.luz = luz; this.tela = tela; this.pipoqueira = pipoqueira; }
  • 14. Implementando a Fachada /** * Método que simplifica o uso de vários objetos * @param filme */ public void assistirFilme(Filme filme) { System.out.println( "Tudo ok para assistir um filme!"); pipoqueira.ligar(); pipoqueira.cozinhar(); luz.dim(10); tela.descer(); projetor.ligar(); projetor.setInput(dvdPlayer); projetor.modoWideSreen(); amplificador.ligar(); amplificador.setDVD(dvdPlayer); amplificador.setSurroundAudio(); amplificador.setVolume(5); dvdPlayer.ligar(); dvdPlayer.play(filme); } /** * Outro método que simplifica * um conjunto de tarefas */ public void pararFilme(){ System.out.println("Desligando o home..."); pipoqueira.desligar(); luz.ligar(); tela.subir(); projetor.desligar(); amplificador.desligar(); dvdPlayer.parar(); dvdPlayer.eject(); dvdPlayer.desligar(); }
  • 16. Para assistir um filme de maneira simplificada public class TesteHomeTheater { public static void main(String[] args) { //Criação das instâncias dos componentes HomeTheaterFacade ht = new HomeTheaterFacade(amplificador, sintonizador, cdPlayer,dvdPlayer, projetor, luz, tela, pipoqueira); ht.assistirFilme(filme); ht.pararFilme(); } }
  • 17. Questões sobre a fachada   Encapsula as classes do sistema?   Acrescenta funcionalidade?   Cada subsistema possui somente um fachada?   Qual o benefício da fachada além de fornecer uma interface simples?   Qual a diferença da Fachada para o Adaptador?
  • 18. Um pouco mais   Além de simplificar uma interface   Desconecta o cliente de um subsistema de componentes   Uma fachada simplifica e um adapter converte uma interface para algo diferente
  • 19. +1 Padrão FACADE O Padrão Facade fornece uma interface unificada para um conjunto de interfaces em um subsistema. A Fachada define uma interface de nível mais alto que facilita a utilização de um subsistema.
  • 21. Participantes   Fachada   Conhece quais as classes do subsistema são responsáveis pelo atendimento de uma solicitação   Classes de Subsistema   Implementam a funcionalidade do subsistema   Encarregam-se do trabalho atribuído a elas pelo objeto Fachada   Não têm conhecimento da Fachada, ou seja, não possuem referência para a mesma
  • 22. Colaborações   Os clientes se comunicam com um subsistema através do envio de solicitações para a Fachada, a qual repassa para os objetos apropriados do subsistema. Embora os objetos do subsistema executem o trabalho real, a fachada pode ter que efetuar trabalho próprio dela para traduzir a sua interface para as interfaces do subsistema   Os clientes que usam a fachada não têm que acessar os objetos do subsistema diretamente
  • 23. Princípio de Design   “Princípio do Mínimo Conhecimento – só interaja com seus amigos mais próximos.”   Ter cuidado com o número de classes com que qualquer objeto interage e também com a forma como essa interação ocorre   Minimizar o acoplamento entre classes   Evita um efeito em cascata quando houver alterações em um sistema
  • 24. Princípio de Design   Mínimo Conhecimento (Lei de Demétrio)   Em um determinado objeto, a partir de qualquer método do mesmo, só podemos invocar métodos que pertençam:   Ao próprio objeto   A objetos que tenham sido passados como parâmetros para o método   A qualquer objeto que seja criado ou instanciado pelo método   A qualquer componente do objeto
  • 25. Princípio de Design   SEM o uso do princípio public float getTemperatura() { Termometro t = estacao.getTermometro(); return t.getTemperatura(); }
  • 26. Princípio de Design   COM o uso do princípio public float getTemperatura() { return estacao.getTemperatura(); }
  • 27. Princípio de Design   Uma classe em conformidade com o princípio public class Carro { Motor motor; public Carro() { } public void ligar(Chave chave) { Portas portas = new Portas(); boolean autorizado = chave.virar(); motor.ligar(); atualizarVisorDoCarro(); portas.trancar(); } private void atualizarVisorDoCarro() { // TODO Auto-generated method stub } }
  • 28. Princípio de Design   Desvantagens   Maior número de classes que envolvem outras classes, isto pode gerar:   Aumento de complexidade   Aumento no tempo de desenvolvimento de software   Redução de desempenho