Item3、單一實例的屬性應為列舉類型或使用private建構子

單一實例就是該類別只實體化一次,但是除非它有是實作對應的類型介面,不然很難進行測試。在1.5之前有2種方法實現單一實例,主要就是限制private建構子跟public 靜態成員。

public class Elvis{
   public static final Elvis INSTANCE = new Evlis();
   private Elvis(){....}
}

這邊將Elvis類別的實力指向該類別public 靜態成員,但是這種做法有個漏洞:如果使用AccessibleObject.setAxccessible方法就可以進行攻擊,所以可以改成:

 public class Elvis{
   private static final Elvis INSTANCE = new Evlis();
   private Elvis(){....}
   public static Elvis getInstance(){ return INSTANCE;}
}

在1.5之後最簡單的做法就是用列舉(Enum)

 public enum Elvis{
      INSTANCE;
 }

results matching ""

    No results matching ""