Duvida sobre instance Classe

2 respostas
P

Olá pessoal,

estou em duvida pois quero que uma classe seja instanciada somente três

vezes …mas minha duvida é quando a classe deixa de ser usada eu

queria decrementar o contador pra próxima pessoa que for instanciar

possa usar ?

ALguém poderia me ajudar vai ser usada a rotina pra J2EE (WEB) ?

abs

public class Singleton {


   private static Singleton instance;
   private static int contador;
   
   private Singleton() {

   }

   public static synchronized Singleton getInstance() {
      if (instance == null)
         instance = new Singleton();
      
      contador++;
      
      if (contador >= 4){
    	  System.out.println("Numero de acesso maior que 4");
    	  return null;
      }
      return instance;
   }
}

public class Singleton1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Singleton s1 =  Singleton.getInstance();
		
		Singleton s2 =  Singleton.getInstance();

		Singleton s3 =  Singleton.getInstance();
	}

}

2 Respostas

danieldestro

Assim você está usando um atributo estático para 3 instâncias. Não dá!

Faz assim:

public class SohTres {
  private static int count = 0;
  private boolean active = false;

  private SohTres() {}

  public static SohTres getInstance() {
    if( count == 3 ) {
      throw new RuntimeException("Número máximo de instância atingido");
    }
    count++;
    return new SohTres();
  }

  public void finalizar() {
    count--;
    active = false;
  }

  public void fazAlgo() {
    if( !active ) throw new RuntimeException("Instância não pode ser mais usada");
  }
}

Neste exemplo você deve chamar o método finalizar() para "matar" e inutilizar o objeto.

Caso não queira usar esta opção, você ainda pode implementar o método finalize() que é chamado pelo Java quando o objeto é destruído, mas ai vc depende do Garbage Collector para liberar o objeto e o número de instâncias que podem ser criadas. O que não é bom!

danieldestro

Ops… esqueci de sincronizar os métodos.

Criado 1 de maio de 2006
Ultima resposta 2 de mai. de 2006
Respostas 2
Participantes 2