Bom pessoal estou fazendo um sisteminha que simula um jogo de dados para isso uso ums 4 frames diferentes em cada
frame seto alguns valores para o jogo ou seja no primeiro frame seto a opção de jogo no segundo
quantidade de jogadores nomes para cada um e etc. Isso quer dizer que so executo o jogo no ultimo frame para isso eu
fiz em cada frame um metodo que recebe a referencia do controle do jogo quando um frame chama o outo eu passo a referncia
ai vem minha pergunta vi algumas coisas de getStance e singleton qual vcs acham que é melhor de se usar se for getStance ate sei como usar
se for singleton peço vcs um exemplo, do jeito que estou fazendo e melhor ??. Agumas dessas formas é correta usar em modelo 3 camadas pois estou fazendo em 3 camadas. Desde já agradeço pela a atenção.
Vamos lá…vou postar um exemplo simples de máquina de estado ok?
Crie uma classe chamada Maquina:
[code]public class Maquina {
private String nome = null;
private boolean chaveMaquina;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Maquina(String nome) {
super();
this.nome = nome;
}
public void ligarMaquina() {
chaveMaquina = true;
System.out.println("Maquina ligada");
new Thread(new Runnable() {
public void run() {
while (chaveMaquina) {
System.out.print(".");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
public void desligarMaquina() {
chaveMaquina = false;
System.out.println("Maquina desligada");
}
}[/code]
Essa classe conterá as ações (estados) da sua máquina além de atributos.
Agora vamos criar uma classe com um Design Pattern Singleton, para que você possa ter uma única instância do objeto e não mais que isso. Chame-a de MaquinaFactory:
[code]public class MaquinaFactory {
private static Maquina maquina = null;
public static Maquina getInstance() {
if (maquina == null) {
maquina = new Maquina("maquina singleton");
}
return maquina;
}
}[/code]
Agora crie uma classe chamada Teste e execute para ver o resultado. Espero que você tenha um conceito legal de Threads para acompanhar o exemplo.
[code]public class Teste {
public static void main(String[] args) {
//Maquina maquina = new Maquina("Maquina Instancia Normal");
Maquina maquina = MaquinaFactory.getInstance();
maquina.ligarMaquina();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
maquina.desligarMaquina();
}
}[/code]
Na prática conceitual o que te interessa de fato é a classe MaquinaFactory. Perceba que crio um método getInstance() e em seguida instancio o objeto. Não esquecer que esse método sempre será “static”. Em seguida você retorna o objeto. Simples assim.
Espero que te ajude.
Abraço.
Valeu arthurgon. Pra falar a verdade não entendo muito sobre thread não tenho que estudar sobre isso
mais deu pra entender bem seu codigo ficou claro pra mim valeu acho que vai resolver meu problema aqui.
Obrigado arthurgon!
Então, amigo
eu uso Singleton quando preciso de algo parecido… Não acho que seja uma decisão ruim e tbm já estou acostumado com ele.
O exemplo mais clássico dos clássicos é esse, apesar de ter várias formas de implementar:
public final class Singleton {
private static Singleton UNICO = new Singleton();
private Singleton(){ //lalala }
public static Singleton getInstance(){
return UNICO;
}
}
Note que:
-
o construtor e o UNICO são privados, então não é possível criar novos objetos e faz necessário a criação de uma interface nao privada para possibilitar o acesso, de fora da classe, ao membro static
-
o getInstance() é static, público e retorna a única instância possível para o objeto Singleton, então cria um ponto de acesso a única instância do objeto.
Não tem muito erro…
Então juniorsi a classe Singleton ai seria a classe que eu iria stanciar uma unica vez
ou seja vc fez um codigo mais compacto dentro da propria classe que quero instanciar uma
unica vez vc ja fez o codigo do singleton é isso né ???
é isso aí.
Mas nesse caso a instância não está sendo criada em tempo de execução, que deve ser o que vc vai querer…então é só dar uma adaptada.
Seria mais ou menos assim juniorsi em tempo de execusão
public static void main(String[] args) {
Singleton unico = Singleton.getInstance();
Singleton unico2 = Singleton.getInstance(); //unico e unico 2 referenciam o mesmo objeto.
}