`
jackroomage
  • 浏览: 1214943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

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设计模式考试题.pdf

    单子模式中的关键在于构造函数私有和唯一实例,以确保单例类在整个应用程序中只存在一个实例。 8. 观察者模式中的观察者角色是被动接收更新的,被观察者负责通知所有观察者进行相应的更新,但不应由观察者去改变被...

    java实验:设计模式2.doc

    在这个Java实验中,我们主要涉及了五个设计模式:单子(Singleton)、工厂(Factory)、策略(Strategy)、组合(Composite)和观察者(Observer)模式。这些模式被应用于构建一个电子商务网站的购物车系统。 首先...

    (两种)单子模式 (饿汉,懒汉)

    单子模式是一种设计模式,它的主要目标是确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来获取这个唯一的实例。这种模式常用于系统管理类,如日志、配置对象等,以避免资源浪费和保证数据一致性。 ...

    java练习作业

    ### Java编程基础实战知识点解析 #### 一、数学问题求解与循环控制 **知识点1:多重循环解决数学方程** 在题目中的第一个例子中,我们看到了如何利用嵌套循环来解决数学问题。具体而言,代码通过三重`for`循环遍历...

    第16章 设计范式.pdf

    单子模式是最基础的设计范式之一,它确保一个类只有一个实例,并提供全局访问点。在Java中,单子模式常用于控制资源的唯一性,如配置管理、日志记录等。实现单子模式的关键在于限制构造函数的访问权限,通常设置为...

    Functional Design Patterns

    函数式设计模式是指在函数式编程中使用的模式,用于解决特定的设计问题。在函数式编程中,函数被视为一等公民,这意味着函数可以像任何其他数据类型一样被传递和返回。函数式编程强调不可变性和纯函数,这有助于创建...

    21天学通Java-由浅入深

    202 10.3.3 父子类间的构造器的调用流程 204 10.3.4 如何自定义构造器 207 10.4 什么是单子模式 208 10.5 构造器在程序中是何时运行的 211 10.6 综合练习 214 10.7 小结 215 10.8 习题 215 第11章 异常处理(精彩...

    Functional Programming in Scala正式版

    - **第10章**:这一章可能涉及更多高级的函数式编程结构和技术,如单子(Monads)、应用型(Applicatives)、折迭(Folds)等,进一步深化对函数式编程的理解和应用能力。 综上所述,《Functional Programming in Scala》...

    遗传并行粒子群优化算法及其性能分析 (2).pdf

    5. **结果分析**:实验结果可能表明,无论是在单子群、k子群还是任意子群模式下,GPSO都表现出了优于单一PSO或遗传算法的性能。特别是在某些特定的优化问题上,特定的并行策略可能显示出更好的性能。 6. **未来工作...

    Incarnate MUD Server-开源

    此外,了解莱布尼兹的单子哲学如何影响到软件设计,可以帮助开发者理解如何将哲学理念应用于编程实践中,创造更加自足和稳定的系统。 总结一下,"化身MUD服务器"是一个基于Java的开源MUD服务器项目,其设计理念深受...

    coffee-monad

    一般来说,Monad是一种设计模式具体来说,Monad是实现并满足的数据结构。 Monad是在Haskell中引入的,但是任何支持高阶函数的语言都可以实现Monad,例如Javascript / Coffeescript单子类型类类型类是Haskell中的一...

Global site tag (gtag.js) - Google Analytics