Dúvida com padrão Singleton

7 respostas
Fragata

Essa é uma classe singleton, estou com dúvida em uma coisa, na implementação, eu não sei como setar um valor, 42 por exemplo, para a instancia de Numero, como eu testo essa classe Numero

public class Numero {

private static Numero n = null;

//construtor

private Numero(){

}

static public Numero getN() {

if(n == null){

n = new Numero();

}	return n;

}
public Numero setN(Numero n) {
return this.n=n;

}
}

class testaX{

public static void main(String args[]){

Numero myInstance;

Numero.setN(42); <—A dúvida é aqui

System.out.println("O valor myInstance é: "+Numero.getN());

}

}

7 Respostas

mduques

Esse seu singleton ai ta sem sentido… de uma olhada no GOF…

Numero.getN().setN(42);

volnei

Singleton é isso...

public class Numero{
  private static Numero instance;

  public static Numero getInstance(){
    if(instance==null){
      instance = new Numero();
    }
  }

  public static void setN(int n){
    getInstance().setValue(n);
  }

  public static int getN(){
    getInstance().getValue();
  }
}
Fragata

Aqui nesa parte é que tá o problema:

public static void setN(int n){

Meu professor disse que não é pra usar void, porque não taria retornando nada, e nem static no setter, como eu resolvo isso sem usar static e void no set

paulofafism

Implementação do singleton existe apenas um método estático. Os campos ou propriedades, e os métodos get e set não devem ser estáticos, se foram estáticos vc parece ter um classe utilitária. Veja como ficaria o singleton

public class Numero{  
        private static Numero instance;  
        private int number;
      
       /*Veja como fica seu método singleton. Vc deve verificar se já existe uma instância do  
        *objeto, se não existir, cria a instância,  quando você chamar esse método de   
        *novo ele   irá retorna a instÂncia do objeto já criada*/ 
       public static Numero getInstance(){  
          if(instance==null){  
            instance = new Numero();  
            return instance;
          }  
          else
            return instance;
      }  
      
     public void setN(int n){  
            numero = n;
     }  
     
     public int getN(){  
            return numero;
     }  
   }
paulofafism

Ops me esqueci. Para testar seu singleton

public class SingletonTest{
        public static void main(String args[]){
          Numero myInstance = Numero.getInstance();
          myInstance.setN(42); <---A dúvida é aqui
          System.out.println("O valor myInstance é: "+ myInstance.getN());
        }
     }
peerless

o construtor do singleton deve ser privado.

Fragata

Obrigado pela ajuda.

Criado 2 de outubro de 2008
Ultima resposta 2 de out. de 2008
Respostas 7
Participantes 5