SingleTon - HELP

7 respostas
J

Pessoal, boa tarde, estou desenvolvendo um trabalho na faculdade
e quase na parte final dei uma empacada
e estou precisando de uma ajudinha do pessoal

"6. Crie, dentro do pacote controladores, uma classe chamada ControladorPrincipal. Essa classe deverá ter as seguintes características:

a. Deverá ser um singleton
b. Deverá ter um método que receba os dados da tela de cadastro de produto, para efetuar esse cadastro."

ja fiz todo o meu sistema
tenhu uma tela de cadastro de produtos e tudo o mais

agora, sei que SingleTon vc tem uma classe onde c instancia ela apenas uma vez
ja li os posts antigos aqui e li tb sobre singleton na wikipedia
mas ainda continuo perdido

seria mais ou menos isso?

public class ControladorPrincipal 
{
	private static  Produtos novoProduto = new Produtos();
	
	public ControladorPrincipal()
	{
		
	}
	
	public static Produtos getNovoProduto()
	{
		if (novoProduto == null)
		{
			novoProduto = new Produtos();
		}
		
		return novoProduto;
		
	}

}

7 Respostas

diego.sas
public class Exemplo {
	private static Exemplo singleton;
	
	private Exemplo() {		
	}
	
	public static Exemplo getInstance(){
		if(singleton == null){
			singleton = new Exemplo();
		}
		return singleton;
	}
}
Flw
nel

Não, é quase isso.
Basicamente:

public class ControladorPrincipal {
    private static final ControladorPrincipal cp;
    
    private ControladorPrincipal(){}

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}
diego.sas
nel:
Não, é quase isso. Basicamente:
public class ControladorPrincipal {
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}

Neste caso se não tiver o construtor "private" ... é possivel criar uma nova instancia da classe.

public class ControladorPrincipal {

    private ControladorPrincipal (){}
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}
[/
F

jilles:
Pessoal, boa tarde, estou desenvolvendo um trabalho na faculdade
e quase na parte final dei uma empacada
e estou precisando de uma ajudinha do pessoal

"6. Crie, dentro do pacote controladores, uma classe chamada ControladorPrincipal. Essa classe deverá ter as seguintes características:

a. Deverá ser um singleton
b. Deverá ter um método que receba os dados da tela de cadastro de produto, para efetuar esse cadastro."

ja fiz todo o meu sistema
tenhu uma tela de cadastro de produtos e tudo o mais

agora, sei que SingleTon vc tem uma classe onde c instancia ela apenas uma vez
ja li os posts antigos aqui e li tb sobre singleton na wikipedia
mas ainda continuo perdido

seria mais ou menos isso?

public class ControladorPrincipal 
{
	private static  Produtos novoProduto = new Produtos();
	
	public ControladorPrincipal()
	{
		
	}
	
	public static Produtos getNovoProduto()
	{
		if (novoProduto == null)
		{
			novoProduto = new Produtos();
		}
		
		return novoProduto;
		
	}

}

Boa tarde.
olhando o código postado (fora o fato de não “entrar” no if por que tu já instanciaste a variável), pode ser considerado um singleton, mas acredito que não eh o que tu precisa.

segue:

a classe que deve ser o singleton é teu controlador e não teu produto, imagine a situação… vais salvar enumeros produtos diferentes, o produto pode ser qualquer coisa… mais a forma de salvar vai ser sempre a mesma… compreende?

então quem deveria ser instaciado apenas uma vez e funcionaria sempre… seria teu controlador concorda?

nel
diego.sas:
nel:
Não, é quase isso. Basicamente:
public class ControladorPrincipal {
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}

Neste caso se não tiver o construtor "private" ... é possivel criar uma nova instancia da classe.

public class ControladorPrincipal {

    private ControladorPrincipal (){}
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}
[/

Observação correta. Já editei :)

J
diego.sas:
nel:
Não, é quase isso. Basicamente:
public class ControladorPrincipal {
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}

Neste caso se não tiver o construtor "private" ... é possivel criar uma nova instancia da classe.

public class ControladorPrincipal {

    private ControladorPrincipal (){}
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}
[/

ahh entendi
estou comecando a entender...

public static synchronized
para que seriviria esse synchronized? e exatamente o que esta acontecendo nessa parte do codigo getInstance() ele seria a unica instanciacao da classe?
nel
jilles:
diego.sas:
nel:
Não, é quase isso. Basicamente:
public class ControladorPrincipal {
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}

Neste caso se não tiver o construtor "private" ... é possivel criar uma nova instancia da classe.

public class ControladorPrincipal {

    private ControladorPrincipal (){}
    private static final ControladorPrincipal cp;

    public static synchronized ControladorPrincipal getInstance() {
        if(null == cp) {
            cp = new ControladorPrincipal;
        }
         return cp;
    }
}
[/

ahh entendi
estou comecando a entender...

public static synchronized
para que seriviria esse synchronized? e exatamente o que esta acontecendo nessa parte do codigo getInstance() ele seria a unica instanciacao da classe?

O synchronized indica que o seu método podera ser acessado exclusivamente por uma Thread de cada vez.
Por menores que possam ser as chances de duas Threads acessarem o seu método, isso pode vir a ocorrer e gerar duas instancias, por isso o modificar synchronized.

Toda, ele deixa o seu código menos perfomático e etc e isso já foi bastante discutido em todo o mundo Java, basta procurar na net ou , se preferir, aqui no GUJ mesmo :)

Criado 9 de novembro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 7
Participantes 4