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;
}
}
[quote=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;
}
}
[/quote]
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?
[quote=diego.sas][quote=nel]Não, é quase isso.
Basicamente:
[code]public class ControladorPrincipal {
private static final ControladorPrincipal cp;
public static synchronized ControladorPrincipal getInstance() {
if(null == cp) {
cp = new ControladorPrincipal;
}
return cp;
}
}[/code][/quote]
Neste caso se não tiver o construtor “private” … é possivel criar uma nova instancia da classe.
[code]public class ControladorPrincipal {
private ControladorPrincipal (){}
private static final ControladorPrincipal cp;
public static synchronized ControladorPrincipal getInstance() {
if(null == cp) {
cp = new ControladorPrincipal;
}
return cp;
}
}[/code][/[/quote]
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?
[quote=jilles][quote=diego.sas][quote=nel]Não, é quase isso.
Basicamente:
[code]public class ControladorPrincipal {
private static final ControladorPrincipal cp;
public static synchronized ControladorPrincipal getInstance() {
if(null == cp) {
cp = new ControladorPrincipal;
}
return cp;
}
}[/code][/quote]
Neste caso se não tiver o construtor “private” … é possivel criar uma nova instancia da classe.
[code]public class ControladorPrincipal {
private ControladorPrincipal (){}
private static final ControladorPrincipal cp;
public static synchronized ControladorPrincipal getInstance() {
if(null == cp) {
cp = new ControladorPrincipal;
}
return cp;
}
}[/code][/[/quote]
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?
[/quote]
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