1.8 Enum Singleton

根據"Effecttive Java"中的說法: 單元素的enum已經成為實作singleton的最佳方法了, 為了理解這點, 先來複習一下相關的enum知識:

  • Java的enum類型實質上是功能齊全的類別, 因此可以有自己的屬性與方法

  • Java enum的基本思想: 通過公有的靜態final域為每個enum常數導出實例的類別

  • 從某些角度講, enum是單例的泛型化, 本質上是單元素的enum

  • 用enum來實作singleton很簡單, 只需要編寫一個包含單個元素的enum class即可

直接上code:

package idv.design.pattern.singleton.enumtype;

/**
 * @author Carl Lu
 */
public enum Singleton {

    /*
     * In "Effective Java", the author said that
     * "a single-element enum type is the best way to implement a singleton."
     * 
     * The following line is also like:
     * "public final static Singleton uniqueInstance = new Singleton();"
     */
    uniqueInstance;

    public void singletonOperation() {
        System.out.println("Singleton operation with instance: " + Singleton.uniqueInstance.hashCode());
    }

}

自己測看看:

package idv.design.pattern.singleton.enumtype;

/**
 * @author Carl Lu
 */
public class Client {

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            Singleton.uniqueInstance.singletonOperation();
        }
    }

}

原始碼點我

Last updated