首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JAVA写的单件模式解决办法

2012-01-16 
JAVA写的单件模式我看了一个软件,上面提到了单件模式,自己写了一个,就是一个对话框,这个类有个变量 a,点击

JAVA写的单件模式
我看了一个软件,上面提到了单件模式,自己写了一个,就是一个对话框,这个类有个变量 a,点击一次按钮,就把变量加一。
基本上是按照单件模式写的,但是,怎么能有运行起来两个对话框呢,单件模式不是只有一个实例么,而且,两个对话框的变量都不同啊,一个实例怎么会这样呢?

Java code
import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class Singleton extends JFrame{    int a = 1;    private JTextField titleField;        private static Singleton singleton=null;        private JButton jb;    private Singleton()    {        JPanel p = new JPanel();        p.setLayout(new GridLayout(3,1));        p.add(new JLabel("Book title:"));        this.titleField = new JTextField(15);        this.jb = new JButton();        p.add(this.titleField);        jb.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent ev) {                try {                    a++;                    String s = new String();                    Integer i = new Integer(a);                    titleField.setText(i.toString());                }                catch (Exception e) {                }            }        });        p.add(jb);        Integer i = new Integer(a);        titleField.setText(i.toString());        this.add(p);    }    public static Singleton instance()    {        if(singleton==null)            singleton = new Singleton();        return singleton;    }        public static void main(String[] args) {          instance().show();    }}


[解决办法]
你注意看,唯一的构造方法已经被定义成private了。也就是说,只有自己的方法可以new自己。
 public static Singleton instance()
因为不能从外部new这个实例,所以只能开辟一个静态方法。
只要这个实例存在,那么每次访问这个方法,得到的都是同一个实例。这也就是所谓的单例模式。不可能出现第二个实例。
其实加上一个synchronized更好一些。
当然,如果你有另外一个main方法,就另当别论了。

热点排行