单子模式
来源:互联网 发布:淘宝达人申请理由描述 编辑:程序博客网 时间:2024/04/27 01:12
看过请留个言,转载请注明出处,尊重作者劳动成果,谢谢!
单子模式,顾名思义,就是在整个应用过程中只向外界提供唯一的一份实例。很多时候我们有这样的需求,譬如当我们在计算机上多次点击打开回收站或者某个PPT时,实际只会在我们面前呈现一个窗口。为啥?多开窗口浪费资源造成混乱啦。这就是单子模式的运用。单子模式的JAVA实现有两种形式,看代码:
package com.wepull.singleton;
/**
* @author leno 饿汉式单例类
*/
public class EagerSingletion {
private static EagerSingletion single = new EagerSingletion();
private EagerSingletion() {
}
public static EagerSingletion getnSingInstance() {
return single;
}
}
package com.wepull.singleton;
/**
* @author leno 懒汉式单例类
*/
public class LazySingletion {
private static LazySingletion single;
private LazySingletion() {
}
public static LazySingletion getnSingInstance() {
if (single == null) {
single = new LazySingletion();
}
return single;
}
}
两种不同实现方式的区别:
<1> 从资源利用的角度看,懒汉式是在调用其静态方法的时候才被实例化的,所以要比饿汉式稍好一些。
<2> 从反映时间和速度上看,饿汉式在类加载的时候就得到了初始化,所以要比懒汉式好一些。
由上可见,创建一个单子类必须满足以下三个条件:
1.构造器私有
2.自己持有自身的一个静态引用
3.对外面系统提供访问唯一实例的公共静态接口(方法).
下面我们看一个足够形象的例子,让大家对单子模式有更深刻的了解:
package com.wepull.singleton;
import javax.swing.*;
import java.awt.*;
/**
* @author leno 单子模式类
*/
public class DemoSingleton extends JFrame {
// 一个私有的,静态的本类对象
private static DemoSingleton testFrame = new DemoSingleton();
JLabel jLMes = new JLabel();
// 构造必须是私有的,这样其它的类才不能访问
private DemoSingleton() {
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 DemoSingleton getInstance() {
return testFrame;
}
}
package com.wepull.singleton;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* @author leno 测试类
*/
class Test extends JFrame {
JButton jBtn = new JButton();
public Test() {
getContentPane().setLayout(null);
jBtn.setBounds(new Rectangle(125, 182, 168, 43));
jBtn.setText("单击产生唯一窗体");
this.jBtn.addActionListener(new MyActionListener());
this.getContentPane().add(jBtn);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(500, 300);
this.setVisible(true);
}
class MyActionListener implements ActionListener {
// 单击按钮时调用单子模式类的静态方法,获得一个对象
public void actionPerformed(ActionEvent e) {
DemoSingleton testFrame = DemoSingleton.getInstance();
testFrame.setSize(300, 200);
testFrame.setVisible(true);
}
}
public static void main(String[] args) {
Test test = new Test();
}
}
上面我们在一个窗口里面设置了一个按钮,不管你点击多少次,它都只会弹出唯一的一份窗口实例。现在,大家知道什么叫单子模式了吧,希望大家继续关注我们独孤九剑系列,哈哈。
- 单子模式
- 单子模式
- 单子设计模式
- 单子设计模式
- Singleton单子模式
- 单子模式 简介
- 单子设计模式
- Java单子模式
- 模式四(单子模式)
- 单例模式(单子模式)
- 单例模式(单子模式)
- 设计模式---单子(Singleton)
- 单子(Singleton)设计模式
- 仿照单子模式的测试
- 单子(Singleton)设计模式
- oracle数据库连接 单子模式详解
- 单子设计模式(Singleton Pattern)
- 2010.02.23 设计模式之单子模式
- 《Effective C#》Item 20:区分接口实现与虚函数重载
- 在 VMWare 中配置 SQL Server 2005 N + 1 群集 (一) 环境
- 经典设计模式
- COM套间
- mbr详解(转)
- 单子模式
- 61条面向对象设计的经验原则
- 打开窗口及对话框脚本
- bt协议与emule协议几点区别
- 正则表达式语法
- 开博了
- windows上oracle数据库文件锁定周期说明
- 网站推广方法大总结26种
- Solaris 命令行 简单手册