boa tarde pessoal,
Alguem ai tem um exemplo de um Código que esteja aplicado um padrão de projeto? de preferência o singleton! Poderia mandar pra mim? preciso aplicar um em um codigo mas não estou entendo muito bem
boa tarde pessoal,
Alguem ai tem um exemplo de um Código que esteja aplicado um padrão de projeto? de preferência o singleton! Poderia mandar pra mim? preciso aplicar um em um codigo mas não estou entendo muito bem
[code]public class ThereCanBeOnlyOne {
//Crie uma variável estática para guardar a instância única
private static ThereCanBeOnlyOne instance = new ThereCanBeOnlyOne();
//Crie um método para retornar essa variável estática
public static ThereCanBeOnlyOne getInstance() { return instance };
//Torne o construtor privado.
private ThereCanBeOnlyOne() {}
//Você ainda pode criar outros atributos:
private String description = “Highlander”;
public String getDescription() { return description; }
}[/code]
Uso:
No caso daquele codigo meu, eu criaria uma variavel para receber uma instançia, por exemplo quando gera a tele de logon, ai crio um metodo para retornar essa instançia, ou seja não deixaria por exemplo a pessoa abrir duas telas de logon, correto? Esse seria o Singleton?
att
Não sei. Não li aquele código porque estava sem as tags code. Mas só será singleton se seu construtor for tornado privado.
O objetivo do Singleton não é simplesmente ter uma instância só num dado momento, mas sim, garantir que uma, e somente uma, instância da classe existirá na aplicação.
esse codigo abaixo é codigo do login, ele gera um formulario para login no sistema, como por exemplo aplicaria o singleton ai?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* frmLogin.java
*
* Created on 20/04/2010, 22:15:34
*/
package massa;
/**
*
* @author Adauto
*/
import java.awt.Dimension;
import java.sql.SQLException;
import javax.swing.JOptionPane;
// Variables declaration - do not modify
// Variables declaration - do not modify
// Variables declaration - do not modify
public class frmLogin extends javax.swing.JFrame {
frmPrincipal menuPrincipal;
/** Creates new form frmLogin */
public frmLogin() {
//setLocationRelativeTo( null );
//CENTRALIZAR O JFRAME
Dimension dimension = this.getToolkit().getScreenSize();
int x = (int) (dimension.getWidth() - this.getSize().getWidth()) / 3;
int y = (int) (dimension.getHeight() - this.getSize().getHeight()) / 4;
this.setLocation(x, y);
//FIM DO CENTRALIZA
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
pnlLogin = new javax.swing.JPanel();
lblLogin = new javax.swing.JLabel();
lblUsuario = new javax.swing.JLabel();
lblSenha = new javax.swing.JLabel();
lblIcone = new javax.swing.JLabel();
txtUsuario = new javax.swing.JTextField();
txtSenha = new javax.swing.JPasswordField();
btnConectar = new javax.swing.JButton();
btnCancelar = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
pnlLogin.setBackground(new java.awt.Color(240, 240, 0));
pnlLogin.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
lblLogin.setFont(new java.awt.Font("Cambria", 1, 36));
lblLogin.setText("LOGIN");
lblUsuario.setFont(new java.awt.Font("Tahoma", 0, 14));
lblUsuario.setText("Usuário:");
lblSenha.setFont(new java.awt.Font("Tahoma", 0, 14));
lblSenha.setText("Senha:");
lblIcone.setIcon(new javax.swing.ImageIcon("C:\\Users\\Adauto\\Desktop\\ICONES\\user.png")); // NOI18N
txtUsuario.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtUsuarioActionPerformed(evt);
}
});
txtSenha.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtSenhaActionPerformed(evt);
}
});
btnConectar.setIcon(new javax.swing.ImageIcon("C:\\Users\\Adauto\\Desktop\\ICONES\\Login.png")); // NOI18N
btnConectar.setText("Conectar");
btnConectar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnConectarActionPerformed(evt);
}
});
btnCancelar.setIcon(new javax.swing.ImageIcon("C:\\Users\\Adauto\\Desktop\\ICONES\\Cancelar.png")); // NOI18N
btnCancelar.setText("Cancelar");
btnCancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelarActionPerformed(evt);
}
});
javax.swing.GroupLayout pnlLoginLayout = new javax.swing.GroupLayout(pnlLogin);
pnlLogin.setLayout(pnlLoginLayout);
pnlLoginLayout.setHorizontalGroup(
pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlLoginLayout.createSequentialGroup()
.addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(pnlLoginLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lblSenha))
.addGroup(pnlLoginLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lblUsuario))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlLoginLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblLogin)
.addGap(42, 42, 42)))
.addGroup(pnlLoginLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(txtSenha, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtUsuario, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 129, Short.MAX_VALUE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblIcone, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE)
.addContainerGap())
.addGroup(pnlLoginLayout.createSequentialGroup()
.addGap(44, 44, 44)
.addComponent(btnConectar)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 102, Short.MAX_VALUE)
.addComponent(btnCancelar)
.addGap(79, 79, 79))
);
pnlLoginLayout.setVerticalGroup(
pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlLoginLayout.createSequentialGroup()
.addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlLoginLayout.createSequentialGroup()
.addGap(26, 26, 26)
.addComponent(lblLogin)
.addGap(27, 27, 27)
.addComponent(lblUsuario)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lblSenha)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txtSenha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(pnlLoginLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lblIcone, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addGap(19, 19, 19)
.addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnConectar)
.addComponent(btnCancelar))
.addGap(55, 55, 55))
);
getContentPane().add(pnlLogin, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>
private void txtSenhaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void txtUsuarioActionPerformed(java.awt.event.ActionEvent evt) {
}
private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {
if (txtUsuario.getText().isEmpty()) {
javax.swing.JOptionPane.showMessageDialog(this, "preencha seu usuario");
return;
// TODO add your handling code here:
}
if (txtSenha.getText().isEmpty()) {
javax.swing.JOptionPane.showMessageDialog(this, "entre com senha");
return;
}
try {
clsBancoDeDados.rs = clsBancoDeDados.comando.executeQuery
("select * from login where usuario = '"+
txtUsuario.getText() + "' and senha = '" +
txtSenha.getText() + "'");
if (clsBancoDeDados.rs.next()) {
if (menuPrincipal == null) {
menuPrincipal = new frmPrincipal(this);
}
menuPrincipal.permissoes(clsBancoDeDados.rs.getString("permissao"));
txtSenha.setText("");
this.setVisible(false);
menuPrincipal.setVisible(true);
//menuPrincipal.permissoes(clsBancoDeDados.rs.getString("permissao"));
}
else
JOptionPane.showMessageDialog(this, "Usuário ou Senha Incorretos!");
} catch (SQLException e) {
JOptionPane.showMessageDialog(this,"erro de autenticação");
}
}
// Variables declaration - do not modify
private javax.swing.JButton btnCancelar;
private javax.swing.JButton btnConectar;
private javax.swing.JLabel lblIcone;
private javax.swing.JLabel lblLogin;
private javax.swing.JLabel lblSenha;
private javax.swing.JLabel lblUsuario;
private javax.swing.JPanel pnlLogin;
private javax.swing.JPasswordField txtSenha;
private javax.swing.JTextField txtUsuario;
// End of variables declaration
}
[quote=adautoufla]boa tarde pessoal,
Alguem ai tem um exemplo de um Código que esteja aplicado um padrão de projeto? de preferência o singleton! Poderia mandar pra mim? preciso aplicar um em um codigo mas não estou entendo muito bem[/quote]
O padrão Singleton passo a passo.
No seu caso você não tem um singleton. Nada impede um outro programador de chamar o construtor de frmLogin 2 vezes, e criar dois formulários.
Fique atento as convenções de código do Java. A sua classe deveria chamar-se FrmLogin, com f maiúsculo. Quem começa com letra minúscula é nome de variável, não de classe.
Agradecido pela dica do código!
Como poderia aplicar o singleton nesse código?
att
[quote=adautoufla]Agradecido pela dica do código!
Como poderia aplicar o singleton nesse código?
att[/quote]
Vc não quer um singleton Vc quer ter um registro global do objecto usuário.
Utilize o padrão Registry. Esqueça o singleton. (aliás no artigo que passei do singleton está escrito :
“Para singletons lógicos , em java 5 ou superior é melhor utilizar enum. Singletons lógicos são raros e provávelmente sempre os pode substituir pelo uso de outro padrão como Registry”
O registry é muito simples. Básicamente é uma classe com get/set estáticos. (pode ser mais complexo que isso, mas pode ser apenas isso)