网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.关于Java单元测试中的伪对象介绍.
.一个用JAVA写的测算服务器响应速.
.如何避免Microsoft非标准JavaSDK.
.Resin应用服务器开发商通过J2EE认.
.java 写的文件浏览器.
.Java从何而来?为什么会如此火?.
.Java网络编程基础(三) Datagram类.
.关于java.util.regex包中新增字符.
.一个高效简洁的Struts分页方法.
.IOC容器比较:Spring Vs Pico Vs.
.Java与.NET间进行Web Service交互.
.Unicode编码解释UCS、UTF、BMP、.
.Jbuilder配置mssqlserver2000 JD.
.高手编程之——JTextArea操作.
.Java 技巧:在对标准流进行重定向.
.浅出Java Socket编程.
.穿透Socks5 代理的UDP编程.
.SCJP认证套题解析(1).
.用单例模式实现的java连接MySql数.
.Singleton设计模式简单介绍.

Java模式设计之单例模式(一)

发表日期:2008-1-5



  作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

  注:本文乃阎宏博士的《Java与模式》一书的第十五章。

  引言

  单例模式的要点

  单例单例

  显然单例模式的要点有三个;一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

Java模式设计之单例模式(一)(图一)


  资源治理

  一些资源治理器经常设计成单例模式。

  在计算机系统中,需要治理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责治理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中治理这些通信端口,以避免一个通信端口同时被两个请求同时调用。

  需要治理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来治理一个属性文件。

  需要治理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中治理,不可政出多头。

  这些资源治理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;答应整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。

  一个例子:Windows 回收站

  Windows 9x 以后的视窗系统中都有一个回收站,下图就显示了windows 2000 的回收站。

Java模式设计之单例模式(一)(图二)

  在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。

  双重检查成例

  在本章最后的附录里研究了双重检查成例。双重检查成例与单例模式并无直接的关系,但是由于很多C 语言设计师在单例模式里面使用双重检查成例,所以这一做法也被很多Java 设计师所模拟。因此,本书在附录里提醒读者,双重检查成例在Java 语言里并不能成立,详情请见本章的附录。 单例模式的结构

  单例模式有以下的特点:

   .. 单例类只可有一个实例。

   .. 单例类必须自己创建自己这惟一的实例。

   .. 单例类必须给所有其他对象提供这一实例。

  虽然单例模式中的单例类被限定只能有一个实例,但是单例模式和单例类可以很轻易被推广到任意且有限多个实例的情况,这时候称它为多例模式(Multiton Pattern) 和多例类(Multiton Class),请见"专题:多例(Multiton )模式与多语言支持"一章。单例类的简略类图如下所示。

Java模式设计之单例模式(一)(图三)


  由于Java 语言的特点,使得单例模式在Java 语言的实现上有自己的特点。这些特点主要表现在单例类如何将自己实例化上。

  饿汉式单例类饿汉式单例类是在Java 语言里实现得最为简便的单例类,下面所示的类图描述了一个饿汉式单例类的典型实现。

Java模式设计之单例模式(一)(图四)

  从图中可以看出,此类已经自已将自己实例化。

  代码清单1:饿汉式单例类

public class EagerSingleton
{
private static final EagerSingleton m_instance =
new EagerSingleton();
/**
* 私有的默认构造子
*/
private EagerSingleton() { }
/**
* 静态工厂方法
*/
public static EagerSingleton getInstance()
{

·224·Java 与模式
return m_instance;
}
}
  读者可以看出,在这个类被加载时,静态变量m_instance 会被初始化,此时类的私有构造子会被调用。这时候,单例类的惟一实例就被创建出来了。

  Java 语言中单例类的一个最重要的特点是类的构造子是私有的,从而避免外界利用构造子直接创建出任意多的实例。值得指出的是,由于构造子是私有的,因此,此类不能被继续。

上一篇:探索JDK1.5高级编码特征 人气:658
下一篇:Java中关于XML的API惊鸿一瞥 人气:571
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐