> For the complete documentation index, see [llms.txt](https://clu.gitbook.io/design-pattern/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://clu.gitbook.io/design-pattern/18-enum-singleton.md).

# 1.8 Enum Singleton

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

* Java的enum類型實質上是功能齊全的類別, 因此可以有自己的屬性與方法
* Java enum的基本思想: 通過公有的靜態final域為每個enum常數導出實例的類別
* 從某些角度講, enum是單例的泛型化, 本質上是單元素的enum
* 用enum來實作singleton很簡單, 只需要編寫一個包含單個元素的enum class即可

直接上code:

```java
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());
    }

}
```

自己測看看:

```java
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();
        }
    }

}
```

原始碼[點我](https://github.com/yotsuba1022/design-pattern/blob/master/src/main/java/idv/design/pattern/singleton/enumtype/Singleton.java)
