Java设计模式之单子模式应用

前不久在被问到一个问题,有关Java的界面的编程,当点击一个按钮时,要产生一个窗体,但是每点一次都会产生一个,由此想到

了Java的设计模式之单子模式,利用单子模式很好的解决了这个问题.
单子模式就是一个类只能产生一个实例.代码如下:
package test;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.*;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//单子模式类
public class SingletonDemo extends JFrame {
  //一个私有的,静态的本类对象
    private static SingletonDemo testFrame=new SingletonDemo();
    JLabel jLMes = new JLabel();
   //构造必须是私有的,这样其它的类才不能访问
    private SingletonDemo() {
        getContentPane().setLayout(null);    
        this.getContentPane().add(jLMes);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        jLMes.setText("这是产生的唯一窗体");
        jLMes.setBounds(new Rectangle(103, 53, 230, 96));     
    }
// 公有的静态方法返回一个本类对象
    public static synchronized SingletonDemo getInstance()    {
        return testFrame;
    }
}
//测试类
class Test extends JFrame {
  
     JButton jBFrame = new JButton();
     public Test() {
        getContentPane().setLayout(null);
        jBFrame.setBounds(new Rectangle(125, 182, 118, 43));
        jBFrame.setText("单击产生唯一窗体");
      
  this.jBFrame.addActionListener(new MyActionListener());
   this.getContentPane().add(jBFrame);
         this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setSize(300,200);
        this.setVisible(true);
    }
    public static void main(String[] args) {
        Test test = new Test();
    }
   
    class MyActionListener implements ActionListener {
      //单击按钮时调用单子模式类的静态方法,获得一个对象
        public void actionPerformed(ActionEvent e) {
            SingletonDemo testFrame=SingletonDemo.getInstance() ;
            testFrame.setSize(300,200);    
            testFrame.setVisible(true);           

        }
    }
}
创建一个单子类必须满足以下三个条件:
1.构造器私有
2.提供一个私有静态变量引用实例
3.提供一个共有,静态方法获得实例.

你可能感兴趣的:(java,设计模式,编程,swing)