Design fachada e Método Gabarito

19
Design Patterns

Transcript of Design fachada e Método Gabarito

Page 1: Design fachada e Método Gabarito

Design Patterns

Page 2: Design fachada e Método Gabarito

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.

Page 3: Design fachada e Método Gabarito
Page 4: Design fachada e Método Gabarito

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;

Page 5: Design fachada e Método Gabarito

public void assistirFilme(String filme){

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

this.maquinaDePipoca.on();

this.maquinaDePipoca.preparandoPipoca();

this.luzAmbiente.reduzirLuminosidade();

Page 6: Design fachada e Método Gabarito

public void desligar(){

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

this.maquinaDePipoca.off();

this.luzAmbiente.aumentarLuminosidade();

this.dvdPlayer.stop();

this.dvdPlayer.ejetarFilme();

this.dvdPlayer.off();

Page 7: Design fachada e Método Gabarito

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.

Page 8: Design fachada e Método Gabarito

Desligando......

Desligando maquina de pipoca

Aumentando luminosidade

Pausando filme

Ejetando o filme do DVD

Dvd desligado

Page 9: Design fachada e Método Gabarito

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.

Page 10: Design fachada e Método Gabarito

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.");

Page 11: Design fachada e Método Gabarito

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.");

Page 12: Design fachada e Método Gabarito

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.");

Page 13: Design fachada e Método Gabarito

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.");

Page 14: Design fachada e Método Gabarito

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.");

Page 15: Design fachada e Método Gabarito

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.

Page 16: Design fachada e Método Gabarito

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;

Page 17: Design fachada e Método Gabarito

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() .............

Page 19: Design fachada e Método Gabarito

Obrigado !