餓漢式:
/**
* @desc: 餓漢式,類加載時即創建實例
* @desc: feature:可以通過反射機制攻擊;線程安全(多個類加載器除外)
* @author: houkh
* @date: Dec 2, 2014
*/
public class HungrySingletonOfBasic {
public static final HungrySingletonOfBasicinstance = new HungrySingletonOfBasic();
private HungrySingletonOfBasic() {
}
}
/**
* @desc:餓漢式變種
* @author: houkh
* @date: Dec 2, 2014
*/
public class HungrySingletonTwo {
private static HungrySingletonTwo instance = new HungrySingletonTwo();
public static HungrySingletonTwo getInstance() {
return instance ;
}
private HungrySingletonTwo() {
}
}
/**
* @desc: 餓漢式變種2,類加載時實例化
* @deprecated something may be wrong
* @author: houkh
* @date: Dec 2, 2014
*/
public class HungrySingletonThree {
private static HungrySingletonThree instance = null;
static {
instance = new HungrySingletonThree();
}
private HungrySingletonThree() {
}
public static HungrySingletonThreegetInstance() {
return instance ;
}
}
/**
* @desc: 懶漢式,基本類型
* @desc: feature:延時加載;線程不安全,多線程下不能正常工作;需要額外的serializable/transient/readResolve來實現序列化
* @author: houkh
* @date: Dec 2, 2014
*/
public class LazySingletonOfBasic {
private static LazySingletonOfBasic instance = null ;
private LazySingletonOfBasic() {
}
public static LazySingletonOfBasic getInstance() {
if (instance == null) {
instance = newLazySingletonOfBasic();
}
return instance ;
}
}
/**
* @desc: 線程安全,效率較低
* @author: houkh
* @date: Dec 2, 2014
*/
public class LazySingletonTwo {
private static LazySingletonTwo instance =null ;
private LazySingletonTwo() {
}
public static synchronized LazySingletonTwo getInstance() {
if (instance == null) {
instance = newLazySingletonTwo();
}
return instance ;
}
}
/**
* @desc: 靜態內部類:線程安全,延遲加載
* @author: houkh
* @date: Dec 2, 2014
*/
public class InnerStaticSingleton {
private static class SingletonHolder {
private static final InnerStaticSingleton instance = newInnerStaticSingleton();
}
public static final InnerStaticSingletongetInstance() {
return SingletonHolder. instance;
}
private InnerStaticSingleton() {
}
}
/**
* @desc:雙重校驗
* @author: houkh
* @date: Dec 2, 2014
*/
public class DoubleCheckSingleton {
private volatile static DoubleCheckSingleton instance;
private DoubleCheckSingleton() {
}
public static DoubleCheckSingleton getInstance() {
if (instance == null) {
synchronized(DoubleCheckSingleton. class) {
if (instance == null) {
instance = newDoubleCheckSingleton();
}
}
}
return instance ;
}
}
/**
* @desc: 提供序列化機制,絕對防止多次實例化,即使在面對複雜序列化或反射攻擊的時候
* @author: houkh
* @date: Dec 2, 2014
*/
public enum EnumSingleton {
instance ;
}