http://pt.wikipedia.org/wiki/Template_Method
Porém...
Nem tudo é perfeito...
Em pouco tempo voltei ao link pra dar uma conferida, e encontrei essa mensagem:
Esta página foi proposta para eliminação rápida.
* Regra 20 - Artigos que encaixam no perfil de lixo ou impróprio.
20.1 - Desde que não seja o próprio proponente a eliminar o artigo.
20.2 - Confirmar no histórico se existem versões anteriores válidas.
20.3 - Em caso de dúvida sobre a validade do conteúdo, ou do título caso haja artigos afluentes, encaminhar a página para eliminação por votação em Páginas para eliminar.
* Proponente: Fabiano msg 23h38min de 9 de Agosto de 2007 (UTC)
A página será eliminada por um administrador se estiver em conformidade com a política de eliminação.
Administrador: não apagar a página apenas pela justificativa fazer sentido. Apague apenas se for caso de uma das 20 regras de eliminação rápida, devidamente preenchidas e de forma que se justifiquem. Em caso de dúvida deve-se propor para votação e avisar o proponente. Ver também as definições de Wikipedia:Lixo e Wikipedia:Impróprio.
puts... que chato
Bom... mas se o material não ficar no ar lá no wiki, então que pelo menos fique aqui:
== Lá Vai ==
Para entender este design pattern, pense em uma máquina de fazer café, mas que ela também sirva chocolate quente, e chá. Analise e reflita, oque estas três bebidas tem em comum, e oque elas tem de diferente?
Veja que todos “precisam” de açúcar, precisam ser aquecidos e misturados. O Method Template tem como finalidade aproveitar estas características em comum, de forma a permitir que cada bebida tenha também um comportamento específico.
package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public abstract class Bebida {
public String preparBebida(){
addAgua();
addAcucar();
addExtrato();
mecher();
return "Sua bebida está pronta!! \n".toUpperCase();
}
private void addAgua(){
out.println("Adicionando água...");
}
private void addAcucar(){
out.println("Adicionando Aúcar...");
}
private void mecher(){
out.println("Mechendo... Misturando...");
}
protected abstract void addExtrato();
}
package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class Cafe extends Bebida {
@Override
protected void addExtrato() {
out.println("Adicinando extrato de café");
}
}
package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class Chocolate extends Bebida {
@Override
protected void addExtrato() {
out.println("Adicinando extrato de chocolate...");
}
}
package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class Cha extends Bebida{
@Override
protected void addExtrato() {
out.println("Adicinando extrato de chá...");
}
}
package com.gms.designpattern.templatemethod;
import static java.lang.System.out;
public class MaquinaDeBebidas {
public static void main(String [] args) {
Cafe cafe = new Cafe();
out.println(cafe.preparBebida());
out.println(new Chocolate().preparBebida());
out.println(new Cha().preparBebida());
}
}
Um comentário:
Sempre em orientação objeto e design patterns o pessoal vem com exemplos básicos para ilustrar o conceito. Nada errado nisso. O problema é que eles sempre param por aí.
Cara, tenho um desafio pra você. Achar uma solução real onde se aplica orientação objeto ou design patterns que o programador procedural olhe e diga: "Nossa, aí sim eu vi vantagem!"
Compreende?
Postar um comentário