单例模式是Java编程中应用最多的一种设计模式,现在个人将单例模式经常使用到的几种实现方式,简单列举一下:
1、 立即加载模式或者说恶汉模式
public class SingleInstance1 {
//立即加载模式或者说恶汉模式,即在调用方法前实例已经被创建
public static final SingleInstance1 singleInstance1 = new SingleInstance1();
private SingleInstance1(){}
public static SingleInstance1 getInstance(){
return singleInstance1;
}
}
2、延迟加载模式或者懒汉模式
其也称之为双重检查锁机制(DCL)
public class SingleInstance2 {
//延迟加载或者懒汉模式
//使用双重检测机制来解决问题,既保证了不需要同步代码的异步执行性,有保证了单例的效果
public volatile static SingleInstance2 singleInstance2;
private SingleInstance2(){}
public static SingleInstance2 getSingleInstance(){
try {
if(singleInstance2==null){
synchronized(SingleInstance2.class){
if(singleInstance2==null){
singleInstance2 = new SingleInstance2();
}
}
}
}catch (Exception e){
e.printStackTrace();
}
return singleInstance2;
}
}
3、 静态内部类实现机制
使用静态内部类同样能够实现DCL的效果。
public class SingleInstance3 {
public static class SingleInstance3Handler{
private static SingleInstance3 singleInstance3 = new SingleInstance3();
}
//使用静态内置类实现DCL同样的效果
private SingleInstance3(){}
public static SingleInstance3 getInstance(){
return SingleInstance3Handler.singleInstance3;
}
}
4、Static静态代码块实现
public class SingleInstance4 {
private SingleInstance4(){}
public static SingleInstance4 singleInstance4;
static {
singleInstance4 = new SingleInstance4();
}
public static SingleInstance4 getInstance(){
return singleInstance4;
}
}
5、枚举类实现
public class MySingleInstance {
public enum SingleInstance5{
connectionFactory;
private Object object;
private SingleInstance5() {
object = new Object();
}
public Object getObject(){
return object;
}
}
public static Object getObject(){
return SingleInstance5.connectionFactory.getObject();
}
}
以上是Java语言经常使用到的几种实现方式,这里仅仅是简单列举了一下,当然其他语言也同样能够实现,原理是相同的。以上三种实现方式在多线程的环境条件下,能够是线程安全的。