`
qys2010
  • 浏览: 123980 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Singleton(单例)模式

    博客分类:
  • java
阅读更多
Singleton 模式的宗旨在于确保某个类只有一个实例,别且为之提供一个全局访问点。
为了防止其他工作人员实例化我们的类,可以为该类创建唯一一个构造器,并将构造器的可见
设置为私有。值得注意的是,如果我们创建了其他的非私有的构造器,或者根本没有为该类提
供构造器,那么其他人员还是能实例化我们的类。
   如果不希望提前创建单例对象,我们可以等到第一次使用该单例对象的时候在创建它,即
滞后初始化。滞后初始化单例对象有两个理由:
1.也许在静态初始化时间,你没有关于如何初始化单例对象的足够信息。
2.选择滞后初始化单例的目的也许为了等待资源,诸如数据库连接,尤其是在某些特定会话中
不需要这个单例的应用程序中。
   如果在多线程环境中对单例采用滞后初始化,那么我们必须小心防止多个线程同时初始化该
单例。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;   
    }   
    // ** * 多线程 结束   
}  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics