单例模式160905

Posted 王自强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式160905相关的知识,希望对你有一定的参考价值。

 1 /**
 2  * 单例模式:保证只有一个实例 private Singleton(){};
 3  * 饿汉式:先创建 private static final Singleton INSTANCE = new Singleton(); 用的时候调用 public static Singleton getInstance(){return INSTANCE;}
 4  * 懒汉式:用的时候创建实例。
 5  *         synchronized在方法内,则主要double-check;
 6  *         同步在方法上 public static synchronized Singleton getInstance(){ if(instanceLazy==null) instanceLazy=new Singleton();return instanceLazy;}
 7  * 静态代码块:
 8  *         static{ instanceStaticBlock = new Singleton();}
 9  * 静态内部类:
10  *         private static class SingletonHolder{ public static final INSTANCE_STATIC_CLASS=new Singleton();}
11  * 枚举:
12  *         public enum SingletonEnum{INSTANCE;}
13  */
14 public class Singleton implements Serializable{
15     private Singleton(){};  // 私有化构造方法,外部无法创建本类 
16     // 饿汉式
17     private static final Singleton INSTANCE = new Singleton();
18     public static Singleton getInstanceEager(){ return INSTANCE; }
19     // 懒汉式
20     private static volatile Singleton instanceLazy = null;
21     public static Singleton getInstanceLazy1(){
22         if(instanceLazy == null){
23             synchronized(Singleton.class){
24                 if(instanceLazy == null){
25                     instanceLazy = new Singleton();
26                 }
27             }
28         }
29         return instanceLazy;
30     }
31     public static synchronized Singleton getInstanceLazy2(){
32         if(instanceLazy == null){
33             instanceLazy = new Singleton();
34         }
35         return instanceLazy;
36     }
37     // 静态代码块
38     private static Singleton instanceStaticBlock = null;
39     static{
40         instanceStaticBlock = new Singleton();
41     }
42     public static Singleton getInstanceStaticBlock(){ return instanceStaticBlock; }
43     // 静态内部类
44     private static class SingletonHolder{ public static final Singleton INSTANCE = new Singleton(); }
45     public static Singleton getInstanceStaticClass(){ return SingletonHolder.INSTANCE; }
46     
47     // 砖家建议:功能完善,性能更佳,不存在序列化等问题的单例 就是 静态内部类 + 如下的代码
48     private static final long serialVersionUID = 1L;
49     protected Object readResolve(){ return getInstanceStaticClass(); }
50 }
51 //枚举
52 enum SingletonEnum{
53     INSTANCE;
54 }

 

以上是关于单例模式160905的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

常用代码片段

学数答题160905-函数方程

性能比较好的单例写法

160905c3p0详细配置

片段作为 Android 中的单例