五種單例模式
阿新 • • 發佈:2019-01-23
1、餓漢式
public class SingletonHungry {
private SingletonHungry () {
}
private static SingletonHungry singletonHungry = new SingletonHungry();
public static SingletonHungry getInstance(){
return singletonHungry;
}
}
2、懶漢式
public class SingletonLazy {
private static SingletonLazy singletonLazy;
private SingletonLazy () {
/**
* 防止被反射強行建立例項
*/
if(singletonLazy != null) {
throw new UnsupportedOperationException("SingletonLazy was created!");
}
}
public static SingletonLazy getInstance() {
if(singletonLazy == null) {
try {
singletonLazy = new SingletonLazy();
return singletonLazy;
} catch (Exception e) {
e.printStackTrace();
}
}
return singletonLazy;
}
}
3、雙鎖
public class SingletonLock {
private static SingletonLock singletonLock;
private SingletonLock () {
}
public static SingletonLock getInstance() {
if(singletonLock == null) {
synchronized (SingletonLock.class) {
if(singletonLock == null) {
singletonLock = new SingletonLock();
return singletonLock;
}
}
}
return singletonLock;
}
}
4、內部類
public class SingletonInner {
private SingletonInner() {
if (Holder.INSTANCE != null) {
throw new UnsupportedOperationException("INSTANCE was created!");
}
}
static class Holder {
private static SingletonInner INSTANCE = new SingletonInner();
}
public static SingletonInner getInstance() {
return Holder.INSTANCE;
}
}
5、列舉
public enum SingletonEnum{
INSTANCE;
}