Implementando Singleton + Strategy
*****************************************************************************/
Classe main //classe teste
/*****************************************************************************/
package strategy;
public class Teste {
public static void main(String[] args) {
// criei apenas uma classe utilizando o singleton
// nessa classe estão todos os tipos
Tipos camadaDeTipos = Tipos.criarTipoUnico();
Dvd ouro = new Dvd(“Heroes”);
Dvd prata = new Dvd(“Lost”);
Dvd bronze = new Dvd(“Xuxa e os baixinhos”);
// setando os tipos as variáveis ouro prata e bronze
ouro.setCategoria(camadaDeTipos.getTipoOuro());
prata.setCategoria(camadaDeTipos.getTipoPrata());
bronze.setCategoria(camadaDeTipos.getTipoBronze());
// na camada de tipos, possui um default-value
// ouro = 3,00
// prata = 2,00
// bronze = 1,00
//primeiro – irei imprimir esse default-value
System.out.println(“——————– PRIMEIRO PASSO ——————–”);
System.out.println(ouro + “\n”);
System.out.println(prata + “\n”);
System.out.println(bronze);
System.out.println(“\n\n”);
//segundo – iremos modificar o preço dando o dobro do default-value
// dos itens e imprimi-los
System.out.println(“——————– SEGUNDO PASSO ——————–”);
camadaDeTipos.getTipoOuro().setPreco(6.00);
camadaDeTipos.getTipoPrata().setPreco(4.00);
camadaDeTipos.getTipoBronze().setPreco(2.00);
System.out.println(ouro + “\n”);
System.out.println(prata + “\n”);
System.out.println(bronze);
System.out.println(“\n\n”);
//terceiro – iremos extravazar, modificaremos os objetos de caracteristica
// ouro vai ser Bronze
// bronze vai ser prata
// prata vai ser ouro
System.out.println(“——————– TERCEIRO PASSO ——————–”);
ouro.setCategoria(camadaDeTipos.getTipoBronze());
bronze.setCategoria(camadaDeTipos.getTipoPrata());
prata.setCategoria(camadaDeTipos.getTipoOuro());
System.err.println(“Objeto Ouro”); System.out.println(ouro + “\n”);
System.err.println(“Objeto Prata”); System.out.println(prata + “\n”);
System.err.println(“Objeto Bronze”); System.out.println(bronze + “\n”);
System.out.println(“\n\n”);
}
}
/*****************************************************************************/
Classe Tipos // classe aonde é implementando o singleton, para conter apenas tipos unicos e com propósito de guardar em uma única classe todos os tipos existentes, em nosso exemplo são classificações de tipos em ouro = “mais cara”, prata = “intermediária” e bronze = “mais barata”.
/*****************************************************************************/
package strategy;
public class Tipos {
private Categoria tipoOuro;
private Categoria tipoPrata;
private Categoria tipoBronze;
private static Tipos tipo;
private Tipos() {
tipoOuro = new Categoria(3.0,”ouro”);
tipoPrata = new Categoria(2.0,”prata”);
tipoBronze = new Categoria(1.0,”bronze”);
}
public static Tipos criarTipoUnico()
{ if (tipo == null){ tipo = new Tipos(); }
return tipo;
}
public Categoria getTipoOuro() { return tipoOuro; }
public void setTipoOuro(Categoria tipoOuro) { this.tipoOuro = tipoOuro; }
public Categoria getTipoPrata() { return tipoPrata; }
public void setTipoPrata(Categoria tipoPrata) { this.tipoPrata = tipoPrata; }
public Categoria getTipoBronze() { return tipoBronze; }
public void setTipoBronze(Categoria tipoBronze) { this.tipoBronze = tipoBronze; }
}
/*****************************************************************************/
Classe DVD // classe que possui os dvds
/*****************************************************************************/
package strategy;
public class Dvd {
private String titulo;
private Categoria categoria;
public Dvd(String titulo){
this.setTitulo(titulo);
}
public double getPreco(){ return this.getCategoria().getPreco(); //delegacao }
public String getTitulo() { return titulo; }
public void setTitulo(String titulo) { this.titulo = titulo; }
public Categoria getCategoria() { return categoria; }
public void setCategoria(Categoria setandoCategoria) { this.categoria = setandoCategoria; }
public String toString() {
return “Titulo : ” + titulo+ “\n” + getCategoria();
}
}
/*****************************************************************************/
Classe categoria // classe aonde está o modelo de tipos diferentes de categorias
/*****************************************************************************/
package strategy;
public class Categoria {
private double preco;
private String nome;
public Categoria(double preco,String nome) {
this.setPreco(preco);
this.setNome(nome);
}
public double getPreco() { return preco; }
public void setPreco(double preco) { this.preco = preco; }
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }
public String toString(){
return “Categoria : ” + nome + “\n” +
“preco : ” + preco ;
}
}
// ps.. caso de algum erro enviar pergunta para jrafaell*bola*msn.com
//*bola* == @
// envio o arquivo tranquilamente, enquanto não arrumo um shared que não expire se você não usar por mais de 1 mês, kkkkkkkkkkkkkk.

Deixe uma resposta