首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Singleton(单例)形式

2012-11-05 
Singleton(单例)模式Singleton 模式的宗旨在于确保某个类只有一个实例,别且为之提供一个全局访问点。为了防

Singleton(单例)模式

Singleton 模式的宗旨在于确保某个类只有一个实例,别且为之提供一个全局访问点。
为了防止其他工作人员实例化我们的类,可以为该类创建唯一一个构造器,并将构造器的可见
设置为私有。值得注意的是,如果我们创建了其他的非私有的构造器,或者根本没有为该类提
供构造器,那么其他人员还是能实例化我们的类。
?? 如果不希望提前创建单例对象,我们可以等到第一次使用该单例对象的时候在创建它,即
滞后初始化。滞后初始化单例对象有两个理由:
1.也许在静态初始化时间,你没有关于如何初始化单例对象的足够信息。
2.选择滞后初始化单例的目的也许为了等待资源,诸如数据库连接,尤其是在某些特定会话中
不需要这个单例的应用程序中。

?

单例啥时候使用:http://www.jdsyxx.net/oblog313/user1/2/archives/2010/3090.html

为什么使用:全局性的唯一性的功能才使用,如读取配置文件。

?

单例分两种方式实现:饿汉式、懒汉式。

?

饿汉式:

public class Singleton{            private static Singleton singleton = new Singleton ();            private Singleton (){}            public Singleton getInstance(){return singletion;} } 

?

懒汉式:如下。。。。。

?

?? 如果在多线程环境中对单例采用滞后初始化,那么我们必须小心防止多个线程同时初始化该
单例。Singleton 有以下形式:

1.不支持多线程:

    public class Singleton {           //**     * 单线程  开始           private static Singleton instance;           private  Singleton(){}           public static Singleton getInstance(){               if(instance==null){                   instance=new Singleton();               }               return instance;           }          //    **     * 单线程  结束       }  

2.支持多线程:

public class Singleton {      // ** * 多线程 开始      private static Singleton instance = null;      private static Object classlock = Singleton.class;      private Singleton() {      }      public static Singleton getInstance() {          synchronized (classlock) {              if (instance == null) {                  instance = new Singleton();              }              return instance;          }      }        // ** * 多线程 结束   

?

简便方式:

public class Singleton {       // ** * 多线程 开始       private static Singleton instance = null;       private Singleton() {       }       public static synchronized Singleton getInstance() {                   if (instance == null) {                   instance = new Singleton();               }               return instance;       }       // ** * 多线程 结束   }  

?

?

深入研究单例:

参考:http://www.iteye.com/topic/60179? 单例模式完全剖析

热点排行