设计模式——“signleton”

本文详细介绍了单例模式的五种实现方式:懒汉式、饿汉式、枚举、双重检查锁定及静态内部类,并提供了每种方式的具体代码示例。

那天别人问了我一个问题,关于单例模式的,由于之前了解的都是蜻蜓点水,所以重新复习了一次重新总结。

单例模式的写法总的来说有5种:懒汉,恶汉,枚举,双重校验锁,静态内部类

懒汉

 1 public class Signleton{     
 2         private static Signleton instance;     
 3         private Signleton(){}      
 4         public static synchronized Sginleton getInstance(){      
 5              if( instance == null ){     
 6                 instance = new Signleton();      
 7              }      
 8              return instance;      
 9         }    
10 }

恶汉:

 1 public class Singleton {  
 2         private Singleton instance = null;  
 3            static {  
 4                instance = new Singleton();  
 5            }  
 6            private Singleton (){}
 7            public static Singleton getInstance() {  
 8                return this.instance;  
 9         }  
10     }  

双重校验锁:

 1 public class Singleton {     
 2             private volatile static Singleton singleton;     
 3             private Singleton (){}      
 4             public static Singleton getSingleton() {     
 5                 if (singleton == null) {     
 6                       synchronized (Singleton.class) {     
 7                           if (singleton == null) {     
 8                               singleton = new Singleton();     
 9                           }    
10                       } 
11                 }            
12                 return singleton;            
13             }    
14     }  

枚举:

1 public enum Singleton {     
2         INSTANCE;            
3         public void whateverMethod() {}     
4     }

静态内部类:

1 public class Singleton {          
2         private static class SingletonHolder {        
3            private static final Singleton INSTANCE = new Singleton();          
4         }             
5         private Singleton (){}           
6         public static final Singleton getInstance() {                 
7             return SingletonHolder.INSTANCE;             
8         }         
9 }  

有兴趣的可以看这篇文章: http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-java
the best way to do it is to use:
Since java5 : enum: 
Pre    java5 :other

转载于:https://www.cnblogs.com/m-xy/p/3725055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值