码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2014-12-14 00:41:58      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   os   使用   sp   java   

 

    单例模式是设计模式中最简单的形式之一。Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

    要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

    显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

一般Singleton模式通常有三种形式:

  第一种形式:懒汉式,也是常用的形式。

在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
 1 public class SingletonClass{
 2  private static SingletonClass instance=null;
 3  public static SingletonClass getInstance(){
 4    if(instance==null){
 5      synchronized(SingletonClass.class){
 6        if(instance==null)
 7        instance=new SingletonClass();
 8      }
 9    }
10    return instance;
11  }
12  private SingletonClass(){
13  }
14 }

 

  第二种形式:饿汉式。

 1 public static class Singleton{
 2   //在自己内部定义自己的一个实例,只供内部调用
 3   private static final Singleton instance=new Singleton();
 4   private Singleton(){
 5     //dosomething
 6   }
 7   //这里提供了一个供外部访问本class的静态方法,可以直接访问
 8   public static Singleton getInstance(){
 9     return instance;
10   }
11 }

 

  第三种形式: 双重锁的形式。

这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
 1 public static class Singleton{
 2   private static Singleton instance=null;
 3   private Singleton(){
 4     //dosomething
 5   }
 6   public static Singleton getInstance(){
 7     if(instance==null){
 8       synchronized(Singleton.class){
 9         if(null==instance){
10           instance=new Singleton();
11         }
12       }
13     }
14   return instance;
15   }
16 }

 

 //这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。

 

1 public enum Singleton {
2     INSTANCE;
3     public void whateverMethod() {
4     }
5 }

这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏,在实际工作中,我也很少看见有人这么写过。

 http://devbean.blog.51cto.com/448512/203501/

单例模式

标签:style   blog   http   ar   color   os   使用   sp   java   

原文地址:http://www.cnblogs.com/wollens/p/4161862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!