Problema com Singleton

4 respostas
Thiago_Ananias

Olá pessoal!!

Nossa...estou com um problema no meu codigo, não sei se entendi direito o padrao singleton, mas pelo que entendi ele seria unico, devo estar fazendo alguma mer... no codigo! Vejam!

Meu Singleton
public class Sistema {

	public static Sistema sistema		= null;
	private Configuracao configuracao	= new Configuracao();
	private SistemaTexto sistemaTexto	= new SistemaTexto();

	private Sistema() {

	}

	public SistemaTexto getSistemaTexto() {
		return sistemaTexto;
	}

	public Configuracao getConfiguracao() {
		return configuracao;
	}

	public static Sistema getSistema() {

		if(sistema == null) {
			sistema = new Sistema();
		}

		return sistema;

	}

}
package sistema;

import dao.*;
import daoHibernate.*;

public class Fabrica {

	public static LinguaDao retornaLinguaDaoImplementacao() {

		if(Sistema.getSistema().getConfiguracao().getAcesso().equalsIgnoreCase("hibernate")) {
			return new LinguaDaoHibernate();
		} else if (Sistema.getSistema().getConfiguracao().getAcesso().equalsIgnoreCase("jdbc")) {
			//
		}

		return null;

	}

	public static TextoDao retornaTextoDaoImplementacao() {

		if(Sistema.getSistema().getConfiguracao().getAcesso().equalsIgnoreCase("hibernate")) {
			return new TextoDaoHibernate();
		} else if (Sistema.getSistema().getConfiguracao().getAcesso().equalsIgnoreCase("jdbc")) {
			//
		}

		return null;

	}

	public static ModuloDao retornaModuloDaoImplementacao() {

		if(Sistema.getSistema().getConfiguracao().getAcesso().equalsIgnoreCase("hibernate")) {
			return new ModuloDaoHibernate();
		} else if (Sistema.getSistema().getConfiguracao().getAcesso().equalsIgnoreCase("jdbc")) {
			//
		}

		return null;

	}

}

Então, eu fiz o seguinte, no construtor da classe Sistema existem duas outras classes, "Configuracao" e "SistemaTexto" acontece que dentro da classe SistemaTexto eu chamo um metodo da classe "Fabrica" o "retornaTextoDaoImplementacao()" e nele como vocês podem ver eu pego uma informação que deveria estar no "Singleton" Sistema, mas por algum motivo quando eu chamo o metodo "Sistema.getSistema()" ele retorna "NULL"!! pq isso?

valew

4 Respostas

neohacker

Pra mim até a chamada de “Sistema.getSistema()” está tudo certo, verifica o resto.
E altere o atributo sistema para private.

Javabuntu

vc precisa mesmo usar singleton :?: static :?:

peczenyj

Certo, agora desenvolva testes unitários nessa arquitetura e tente obter a maior cobertura de código (use o EMMA para medir, da pra integrar com o eclipse).

Depois pode descobrir pq singletons são do mal.

Thiago_Ananias

Sabe o que eu acho que esta acontecendo:

Dentro do objeto Sistema tem o Configuracao que chama o Fabrica, e o Fabrica chama o “Sistema”, mas o sistema ainda não foi finalizado. Acredito que seja isso…alguma ideia???

valew

Criado 27 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 4
Participantes 4