padrão fachada

Download Padrão Fachada

Post on 26-Jun-2015

756 views

Category:

Technology

7 download

Embed Size (px)

TRANSCRIPT

  • 1. PADRO FACHADA

2. Fachada Alterao de um interface com a inteno de simplific-la Oculta a complexidade de um conjunto de classes 3. Imagine um HomeTheater 4. HomeTheater Muitas classes Muitas interaes Voc precisa saber o funcionamento de tudo para saber usar corretamente 5. Para assistir um filme 1. Ligar a mquina de pipoca 2. Colocar a mquina de pipoca em funcionamento 3. Reduzir as luzes 4. Baixar a tela 5. Ligar o projetor 6. Congurar a entrada do projeto para DVD 7. Colocar o projetor em modo wide-screen 8. Ligar o amplicador de udio 9. Congurar a entrada do amplicador para DVD 10. Congurar o amplicador para surround 11. Ajustar o amplicador para o volume mdio (5) 12. Ligar o DVD Player 13. Acionar o play no DVD Player 6. Para assistir um filme Em Java 1. Ligar a mquina de pipoca 2. Colocar a mquina 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 mdio 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 situao ainda h uma ordem para fazer tudo Ao final pode-se precisar fazer as aes em ordem inversa E para ouvir um CD ou rdio? Se precisar atualizar o sistema ter que aprender um novo algoritmo 8. Soluo para a complexidade A FACHADA 9. A Fachada Uma classe que exponha somente alguns mtodos simples assistirFilme() pararFilme() Trata os componentes do Home Theater como um subsistema Aciona as diversas partes necessrias para implementar o mtodo assistirFilme() 10. A Fachada O cliente assim pode usar os mtodos da Fachada e no do subsistema Para assistir um filme basta acionar um mtodo que se comunica com todo o subsistema 11. Soluo para a complexidade A FACHADA 12. A Fachada Preserva o acesso direto ao subsistema Voc ainda pode usar os mtodos 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 /** * Mtodo que simplifica o uso de vrios 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 mtodo 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(); } 15. Fachada 16. Para assistir um filme de maneira simplificada public class TesteHomeTheater { public static void main(String[] args) { //Criao das instncias dos componentes HomeTheaterFacade ht = new HomeTheaterFacade(amplificador, sintonizador, cdPlayer,dvdPlayer, projetor, luz, tela, pipoqueira); ht.assistirFilme(filme); ht.pararFilme(); } } 17. Questes sobre a fachada Encapsula as classes do sistema? Acrescenta funcionalidade? Cada subsistema possui somente um fachada? Qual o benefcio da fachada alm de fornecer uma interface simples? Qual a diferena da Fachada para o Adaptador? 18. Um pouco mais Alm 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 Padro FACADE O Padro Facade fornece uma interface unificada para um conjunto de interfaces em um subsistema. A Fachada define uma interface de nvel mais alto que facilita a utilizao de um subsistema. 20. Diagrama de classes 21. Participantes Fachada Conhece quais as classes do subsistema so responsveis pelo atendimento de uma solicitao Classes de Subsistema Implementam a funcionalidade do subsistema Encarregam-se do trabalho atribudo a elas pelo objeto Fachada No tm conhecimento da Fachada, ou seja, no possuem referncia para a mesma 22. Colaboraes Os clientes se comunicam com um subsistema atravs do envio de solicitaes 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 prprio dela para traduzir a sua interface para as interfaces do subsistema Os clientes que usam a fachada no tm que acessar os objetos do subsistema diretamente 23. Princpio de Design Princpio do Mnimo Conhecimento s interaja com seus amigos mais prximos. Ter cuidado com o nmero de classes com que qualquer objeto interage e tambm com a forma como essa interao ocorre Minimizar o acoplamento entre classes Evita um efeito em cascata quando houver alteraes em um sistema 24. Princpio de Design Mnimo Conhecimento (Lei de Demtrio) Em um determinado objeto, a partir de qualquer mtodo do mesmo, s podemos invocar mtodos que pertenam: Ao prprio objeto A objetos que tenham sido passados como parmetros para o mtodo A qualquer objeto que seja criado ou instanciado pelo mtodo A qualquer componente do objeto 25. Princpio de Design SEM o uso do princpio public float getTemperatura() { Termometro t = estacao.getTermometro(); return t.getTemperatura(); } 26. Princpio de Design COM o uso do princpio public float getTemperatura() { return estacao.getTemperatura(); } 27. Princpio de Design Uma classe em conformidade com o princpio 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. Princpio de Design Desvantagens Maior nmero de classes que envolvem outras classes, isto pode gerar: Aumento de complexidade Aumento no tempo de desenvolvimento de software Reduo de desempenho 29. Princpio de Design X Fachada