Modelos de padrão de projeto

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)