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

学习设计模式--Singleton

时间:2014-05-13 10:40:15      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

意图:保证一个类只有一个实例,并提供一个访问它的合局访问点。

 

示例一:使用内部静态类的方式保存INSTANCE

bubuko.com,布布扣
 1 /**
 2  * Created by wiikii on 14-5-12.
 3  */
 4 public class Singleton implements Serializable {
 5 
 6     // 使用静态内部类保存INSTANCE
 7     private static class SingletonHolder {
 8         private static final Singleton _INSTANCE = new Singleton();
 9     }
10 
11     // 私有化构造函数  private or protected?
12     private Singleton() {}
13 
14     // 对外接口,获取唯一实例句柄
15     public static Singleton Instance() {
16         return SingletonHolder._INSTANCE;
17     }
18 
19     // readResolve方法应对单例对象被序列化时候
20     private Object readResolve() {
21         return Instance();
22     }
23 }
bubuko.com,布布扣

 

示例二:使用synchronized来保证线程同步。

bubuko.com,布布扣
 1 /**
 2  * Created by wiikii on 14-5-12.
 3  */
 4 public class Singleton implements Serializable {
 5 
 6     private volatile static Singleton _INSTANCE;
 7 
 8     private Singleton() {}
 9 
10     public static Singleton Instance() {
11         if (_INSTANCE == null) {
12             synchronized (Singleton.class) {
13                 if (_INSTANCE == null) {
14                     _INSTANCE = new Singleton();
15                 }
16             }
17         }
18         return _INSTANCE;
19     }
20 }
bubuko.com,布布扣

 

注:

volatile 表示易失变量,主要用于多线程中。   
为了提高效率,线程会将某变量(A)拷贝一份(B)到内存,线程对变量的访问实际访问的是(B),只是在某些特定的操作后,才会同步(A)与(B);因此有可能会存在(A)与(B)不一致的情况。使用volatile修饰的变量,就是告诉JVM不需要变量(A)的拷贝。
如果volatile关键字用于声明简单数据类型(如 int, boolean 等),那么对这些变量的操作将会是原子级别的;但是,如果当变量的值由自身的上一个值决定时,volatile将失效。

学习设计模式--Singleton,布布扣,bubuko.com

学习设计模式--Singleton

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/wiikii-/p/3724605.html

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