Design fachada e Método Gabarito

Post on 19-Jul-2015

1.376 views 3 download

Transcript of Design fachada e Método Gabarito

Design Patterns

Padrão fachada (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 do subsistema.

public class HomeTheaterFacade {

DvdPlayer dvdPlayer;

LuzAmbiente luzAmbiente;

MaquinaDePipoca maquinaDePipoca;

public HomeTheaterFacade(DvdPlayer dvdPlayer, LuzAmbiente luzAmbiente, MaquinaDePipocamaquinaDePipoca) {

this.dvdPlayer = dvdPlayer;

this.luzAmbiente = luzAmbiente;

this.maquinaDePipoca = maquinaDePipoca;

public void assistirFilme(String filme){

System.out.println("Começando a assistir um filme...");

this.maquinaDePipoca.on();

this.maquinaDePipoca.preparandoPipoca();

this.luzAmbiente.reduzirLuminosidade();

public void desligar(){

System.out.println("Desligando......");

this.maquinaDePipoca.off();

this.luzAmbiente.aumentarLuminosidade();

this.dvdPlayer.stop();

this.dvdPlayer.ejetarFilme();

this.dvdPlayer.off();

Começando a assistir um filme...

Ligando maquina de pipoca

Preparando pipoca

Reduzindo luminosidade

Dvd ligado

O filme A volta dos que não foram começou.

Desligando......

Desligando maquina de pipoca

Aumentando luminosidade

Pausando filme

Ejetando o filme do DVD

Dvd desligado

Padrão Método-Gabarito

Define o esqueleto de um algoritmo dentro de um método, transferindo alguns de seus passos para as subclasses.

O Método-Gabarito permite que as subclasses redefinam certos passos de um algoritmo sem alterar a estrutura do próprio algoritmo.

public class Cafe

void prepararCafe()this.ferverAgua();this.misturarCafeNaAguaFervida();this.colocarCafeNaXicara();this.acrescentarAcucarELeite();

private void acrescentarAcucarELeite() System.out.println("Acrescentando açúcar e leite.");

private void colocarCafeNaXicara() System.out.println("Colocando café na xícara.");

private void misturarCafeNaAguaFervida() System.out.println("Misturando o café");

private void ferverAgua() System.out.println("Fervendo um pouco de agua.");

public class Chavoid prepararCha()

this.ferverAgua();this.colocarChaNaAguaQuente();this.colocarChaNaXicara();this.acrescentarLimao();

private void acrescentarLimao() System.out.println("Acrescentando limão.");

private void colocarChaNaXicara() System.out.println("Colocando cha na xícara.");

private void colocarChaNaAguaQuente() System.out.println("Colocando cha na agua quente.");

private void ferverAgua() System.out.println("Fervendo agua.");

public abstract class Gabarito final void prepararBebida()

this.aquecerAgua();this.colocarCondimentoNaAguaFervendo();this.colocarBebidaNaXicara();this.adicionarCondimentos();

abstract void colocarCondimentoNaAguaFervendo();

abstract void adicionarCondimentos();

private void colocarBebidaNaXicara() System.out.println("Colocando bebida na xicara");

private void aquecerAgua() System.out.println("Aquecendo a agua.");

public class Cafe extends Gabarito

@Override

void colocarCondimentoNaAguaFervendo()

System.out.println("Misturando o café na água fervendo");

@Override

void adicionarCondimentos() {

System.out.println("Acrescentando açúcar e leite.");

public class Cha extends Gabarito

@Override

void colocarCondimentoNaAguaFervendo()

System.out.println("Colocando cha na água quente.");

@Override

void adicionarCondimentos()

System.out.println("Acrescentando limão.");

Método Gancho

É um método que é declarado na classe gabarito, ele recebe como padrão uma implementação vazia.

Esse método permite que as subclasses se conectem ao algoritmo em vários pontos, caso necessário.

public abstract class Gabarito

final void prepararBebida()

this.aquecerAgua();

this.colocarCondimentoNaAguaFervendo();

this.colocarBebidaNaXicara();

if(this.isComCondimentos())

this.adicionarCondimentos();

boolean isComCondimentos() Método Gancho

return true;

public class CafeUtilizandoGancho extends Gabarito{@Overridevoid colocarCondimentoNaAguaFervendo()

System.out.println("Colocando café na água fervendo");

@Overridevoid adicionarCondimentos()

System.out.println("Adicionando leite e açúcar ao café");

@Overrideboolean isComCondimentos()

String resposta = this.getRespostaDoCliente();if(resposta.toLowerCase().startsWith("y")){

return true;}else{

return false;

private String getRespostaDoCliente() .............

Obrigado !