单例模式--singleton

单例模式就是说无论程序如何运行,采用单例设计模式永远只会有一个实例化对象产生。

单例实现原理:

(1)构造方法私有化。
(2)创建该类的实例化对象,并将其封装成private static类型。
(3)定义一个静态方法返回该类的实例。

1.饿汉式

 1 /**  
 2  *   
 3  * 单例模式的实现:饿汉式,线程安全 但效率比较低  
 4  */  
 5 public class SingletonTest {   
 6   
 7     private SingletonTest() {   
 8     }   
 9   
10     private static final SingletonTest instance = new SingletonTest();   
11   
12     public static SingletonTest getInstancei() {   
13         return instance;   
14     }   
15   
16 } 

 

2.懒汉式

 1 /**
 2  * 单例模式的实现:饱汉式,非线程安全
 3  */
 4 public class SingletonTest {
 5     private SingletonTest() {
 6     }
 7 
 8     private static SingletonTest instance;
 9 
10     public static SingletonTest getInstance() {
11         if (instance == null)
12             instance = new SingletonTest();
13         return instance;
14     }
15 }

 

3.加锁懒汉式

 1 /**
 2  * 线程安全,但是效率非常低
 3  *
 4  * @author vanceinfo
 5  */
 6 public class SingletonTest {
 7     private SingletonTest() {
 8     }
 9 
10     private static SingletonTest instance;
11 
12     public static synchronized SingletonTest getInstance() {
13         if (instance == null)
14             instance = new SingletonTest();
15         return instance;
16     }
17 }

 

4.双检懒汉式

 1 /**
 2  * 线程安全  并且效率高
 3  */
 4 public class SingletonTest {
 5     private static SingletonTest instance;
 6 
 7     private SingletonTest() {
 8     }
 9     
10     public static SingletonTest getIstance() {
11         if (instance == null) {
12             synchronized (SingletonTest.class) {
13                 if (instance == null) {
14                     instance = new SingletonTest();
15                 }
16             }
17         }
18         return instance;
19     }
20 }  

 

 5.静态内部类的懒汉式

 1 /**
 2  * 线程安全,懒加载
 3  */
 4 public class SingletonTest {
 5 
 6     private SingletonTest() {
 7     }
 8 
 9     private static class SingletonTestInner {
10         private static final SingletonTest instance = new SingletonTest();
11     }
12 
13 
14     public static SingletonTest getIstance() {
15         return SingletonTestInner.instance;
16     }
17 }

 

6.枚举

 1 /**
 2  * 线程安全,自动实现序列化机制
 3  */
 4 public enum SingletonTest {
 5     INSTANCE;
 6 
 7     public String getField() {
 8         return field;
 9     }
10 
11     public void setField(String field) {
12         this.field = field;
13     }
14 
15     private String field;
16 }

 

posted @ 2020-03-03 11:30  Ivy_Xu  阅读(202)  评论(0编辑  收藏  举报