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.

~ por strubloid em Agosto 22, 2008.

Deixe uma resposta