Singleton[resolvido]

6 respostas
j.silvestre

Amigos estou com uma duvida

public synchronized static SerialConnection getInstance(){
           if(serialconnection == null) {
                serialconnection = new SerialConnection(parameters);
           }
           return serialconnection;
     }

quando eu chamar este metodo tenho que retornar para um objeto ?

Object conexao = SerialConnection getInstance(); // ??

sds

j.silvestre

6 Respostas

guilherme.dio

Acredito que o mais conveniente seria retornar um Object

ViniGodoy

Só se for para reduzir código, por exemplo:

SerialConnection conn = SerialConnection.getInstance(); conn.open(); conn.send("XYZ); conn.close();

Mas, vc poderia usar assim:

SerialConnection.getInstance().open(); SerialConnection.getInstance().send("XYZ); SerialConnection.getInstance().close();

j.silvestre

Amigos

ainda continuo com problemas para instanciar no padrão singleton:

o seguinte tenho duas classes:
SerialConection
SerialParameters

segue abaixo o construtor de ambas:

public class SerialParameters {

    private String portName;
    private int baudRate;
    private int flowControlIn;
    private int flowControlOut;
    private int databits;
    private int stopbits;
    private int parity;
    private static SerialParameters parameters;
    /**
    Default constructer. Sets parameters to no port, 9600 baud, no flow
    control, 8 data bits, 1 stop bit, no parity.
    */
    public SerialParameters () {
	this("",
	     9600,
	     SerialPort.FLOWCONTROL_NONE,
	     SerialPort.FLOWCONTROL_NONE,
	     SerialPort.DATABITS_8,
	     SerialPort.STOPBITS_1,
	     SerialPort.PARITY_NONE );

    }
public SerialConnection(//SerialDemo parent,
            SerialParameters parameters){
         
      this.parameters = parameters;
       
    }

então eu fiz assim na classe Serial connection:

public synchronized static SerialConnection getInstance(){
       
           if(serialconnection == null) {
                serialconnection = new SerialConnection(parameters);
           System.out.println("criando instancia serial"); // debug
           }
           return serialconnection;
     }

na Serial Parameters:

public synchronized static SerialParameters getInstance2(){
    if(parameters == null) parameters = new SerialParameters();
    return parameters;

    }

então na terceira classe chamei elas assim:

public class NewJframe extends javax.swing.JFrame {
    private SerialParameters parameters;
    private SerialConnection connection;


    /** Creates new form NewJframe */
    public NewJframe() {
        initComponents();
    parameters = SerialParameters.getInstance2();
    connection =  SerialConnection.getInstance();

então ele dá esse erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at serialjava.SerialConnection.openConnection(SerialConnection.java:119)

linha 119

portId =  CommPortIdentifier.getPortIdentifier(parameters.getPortName());

se alguem puder ajudar…

sds

j.silvestre

j.silvestre

funcionou…

public synchronized static SerialConnection getInstance(SerialParameters parameters){
       
           if(serialconnection == null) {
                serialconnection = new SerialConnection(parameters);
           System.out.println("criando instancia serial"); // debug
           }
           return serialconnection;
     }
connection =  SerialConnection.getInstance(SerialParameters.getInstance2());

com as mudanças acima funfou…

post do vini foi muito esclarecedor.

obrigado

sds

j.silvestre

R

bom exemplo

j.silvestre

Seguinte esta classe esta no padrão Singleton Pattern, e esta funcionado perfeitamente, porem agora tenho que criar outro objeto para esta mesma classe, isto é possivel ? ou pelo fato dela estar no padrão Singleton serei obrigado a duplicar a classe e colocar outro nome para poder instanciar ?

sds

j.silvestre

Criado 28 de junho de 2011
Ultima resposta 28 de mai. de 2013
Respostas 6
Participantes 4