常见的设计模式 ----- 单例模式

单例模式(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。

例1:最常用的单例模式

 1 public class SingleDemo {
 2 
 3     // 在类加载的同时已经创建好一个静态对象,调用时反应速度快
 4     // 资源利用率不高
 5     private static SingleDemo obj = new SingleDemo();
 6 
 7     // 私有构造函数
 8     private SingleDemo (){
 9     }
10     
11     public static SingleDemo getInstance() {
12         return obj;
13     }
14 }

例2:资源利用率高的单例

 1 public class SingleDemo {
 2 
 3     // 私有构造函数
 4     private SingleDemo (){}
 5 
 6     // 静态内部类
 7     // 资源利用率高, 不执行getInstance就不会被实例,可以执行该类其他静态方法
 8     public static class SingleFactory {
 9         public static SingleDemo obj = new SingleDemo();
10     }
11 
12     public static SingleDemo getInstance() {
13         return SingleFactory.obj;
14     }
15 }

例3:不推荐使用的单例

 1 public class SingleDemo {
 2 
 3     // 对象实例
 4     private static SingleDemo obj;
 5 
 6     // 私有构造函数
 7     private SingleDemo (){}
 8 
 9     // 获得该类的一个实例,多线程的场合,要考虑排它锁
10     // 可以对该方法加锁,也可以对该实例加锁
11     // 加锁,能够保证在同一时刻最多只有一个线程执行该段代码。
12     // 对该方法加锁的话,可能会影响系统的并发效率,增加系统开销
13     public static synchronized SingleDemo getInstance() {
14         
15         if (obj == null) {
16             obj = new SingleDemo();
17             return obj;
18         }
19         return obj;
20     }
21 
22     // 对该实例加锁的例子
23     // 不推荐使用,在obj分配内存但还未初始化的时候,容易出错
24     public static SingleDemo getInstance2() {
25         
26         if (obj == null) {
27             synchronized (obj) {
28                 if (obj == null) {
29                     obj = new SingleDemo();
30                 }
31             }
32         }
33         return obj;
34     }
35 }
原文地址:https://www.cnblogs.com/keyiei/p/3594033.html