java模式之单例模式

原创 2006年06月05日 11:14:00

java模式之单例模式:
          单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
 特点:
       1,一个类只能有一个实例
       2,自己创建这个实例
       3,整个系统都要使用这个实例
例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"

是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而

且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存

在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。
一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer

Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通

信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时

调用。
内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。

这样的系统应当由一个对象来管理这些属性文件。

一个例子:Windows 回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,

而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。

两种形式:
1,饿汉式单例类
public class Singleton {

  private Singleton(){}

  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}

2,懒汉式单例类

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次   

 
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
  return instance;   }

}


第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。


注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。
一般来说第一种比较安全。

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java中的单例模式

Java单例模式深入理解

【Java】单例模式

这种设计模式是保证类只有一个类Class只有一个实例存在,如果再次新建这个类,之前的类会立即被摧毁。多用于线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序,数据库的连接类等,相当于线程进程中的缓...

java单例模式

  • 2015-08-10 17:04
  • 23KB
  • 下载

Java单例模式应用研究.pdf

  • 2010-05-27 13:50
  • 187KB
  • 下载

Java 单例模式

java单例模式详解: 概念:   java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。   单例模式有一下特点:   1、单例类只能有一个实例。 ...

java 单例模式

JAVA单例模式

  • 2012-07-25 10:18
  • 13KB
  • 下载

java 单例模式的好处

http://blog.csdn.net/xiaolongyiqi/archive/2009/02/23/3928509.aspx http://crazyfeng.javaeye.com/blog...

java单例模式

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)