Singleton實現

單例模式的實現大致有以下幾種方式:

餓漢式:

/**
  * @desc: 餓漢式,類加載時即創建實例
  * @desc: feature:可以通過反射機制攻擊;線程安全(多個類加載器除外)
  * @author: houkh
  * @date: Dec 2, 2014
  */
public class HungrySingletonOfBasic {
       public static final HungrySingletonOfBasicinstance = new HungrySingletonOfBasic();

       private HungrySingletonOfBasic() {

      }
}

餓漢式變種1:
/**
  * @desc:餓漢式變種
  * @author: houkh
  * @date: Dec 2, 2014
  */
public class HungrySingletonTwo {
       private static HungrySingletonTwo instance =  new HungrySingletonTwo();

       public static HungrySingletonTwo getInstance() {
             return instance ;
      }

       private HungrySingletonTwo() {

      }
}


餓漢式變種2:
/**
  * @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 ;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章