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

设计模式--单例

时间:2016-06-14 07:45:05      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

主旨

确保在整个程序生命周期内,某类型实例最多只有一个

适用场景

某系统可以创建多个打印任务,但同一时刻只支持执行一个打印任务

特点

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

分类

常用的单例模式分为饿汉式和懒汉式两种

1、饿汉模式

public class Singleton{

         private static Singleton _instance=new Singleton(); 

         private Singleton(){};

         public static Singleton getInstance(){

              return _instance;

         }

}

由于jvm在创建Singleton类时候,同时也创建了一个静态的Singleton实例,所以该模式天生就是线程安全的

2、懒汉模式(双重检查锁定)

public class Singleton{

         private static Singleton _instance;

         private Singleton(){}

         public Singleton getInstance(){

             if(_instance==null){

                   synchronized(Singleton.class){

                          if(_instance==null){

                              _instance=new Singleton();

                         }    

                   }

         }

         return _instance;

      }

   }

由于该模式为了确保线程安全使用了synchronized效率降低了,但同时在使用synchronized之前多加一层判断,一定层度屏蔽synchronized的执行

3、懒汉模式(静态内部类)

public class Singleton {
private static class LazyLoader {
  private static final Singleton instance = new Singleton();
}

private Singleton() {
}

public static Singleton getInstance() {
  return LazyLoader.instance;
}
}

由于静态内部类LazyLoader的instance成员只有在第一次调用的时候才会被实例化

设计模式--单例

标签:

原文地址:http://www.cnblogs.com/xiongweidotnet/p/5582653.html

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