设计模式:单例
Posted 感遇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式:单例相关的知识,希望对你有一定的参考价值。
- 传统的实现方法:两私一公,涉及线程安全问题(即使有多重检查锁也可以通过反射破坏单例)
public class Singleton {
private volatile static Singleton instance = null;
private Singleton () {
}
public static Singleton getSingleton() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- JDK1.5以前
public class Singleton {
private static class SingletonInstance {
private static final Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getSingleton() {
return SingletonInstance.instance;
}
}
- 目前最为安全的实现单例的方法是通过内部静态enum的方法来实现,因为JVM会保证enum不能被反射并且构造器方法只执行一次。
public class Singleton { private Singleton() {} public static Singleton getInstance() { return SingletonEnum.INSTANCE.getInstance(); } private static enum SingletonEnum { INSTANCE; private Singleton singleton = null; private SingletonEnum() { singleton = new Singleton(); } public Singleton getInstance() { return this.singleton; } } public static void main(String[] args) { Singleton singleton1 = Singleton.getInstance(); Singleton singleton2 = Singleton.getInstance(); System.out.println("singleton1==singleton2? " + (singleton1==singleton2)); } }
以上是关于设计模式:单例的主要内容,如果未能解决你的问题,请参考以下文章