Effective java第2版-ノート(01)単例(Singleton)の列挙(enum)実現

3571 ワード

直接コード:
 1 public enum Boss {
 2 
 3     INSTANCE;
 4 
 5     private String name;
 6 
 7     public void doSomeThing() {
 8         System.out.println(name + " is doing something now...");
 9     }
10 
11     public String getName() {
12         return name;
13     }
14 
15     public void setName(String name) {
16         this.name = name;
17     }
18 
19 }

注意:javaのenumは徹底したclassであり、他の属性や方法を自由に追加できるので、classとして完全に使用できます.
 
検証:
 1     @Test
 2     public void testSingleton() {
 3 
 4         Boss b1 = Boss.INSTANCE;
 5         b1.setName("  ");
 6         b1.doSomeThing();//   is doing something now...
 7 
 8         Boss b2 = Boss.INSTANCE;
 9         b2.doSomeThing();//   is doing something now...
10 
11         System.out.println(b1.equals(b2));//true
12 
13     }

11行出力のtrueは,b 1とb 2が同じオブジェクトであることを実証し,この方式は反射呼び出しプライベートコンストラクタが単一例を破壊することを絶対に防止する.