「Java」「Singleton」 Chapter4 Question7

Given: A
class SingletonA{
 private static SingletonA instance;
 private SingletonA() {}
 public static synchronized SingletonA getInstance() {
  return instance;
 }
}

------------------------------------
Given: B
class SingletonB{
 private static SingletonB instance = new SingletonB();
 protected SingletonB() {}
 public static SingletonB getInstance() {
  return instance;
 }
}

------------------------------------
Given: C
class SingletonC{
 SingletonC(){}
 private static class SingletonHolder{
  private static final SingletonC INSTANCE=new SingletonC();
 }
 public static SingletonC getInstance() {
  return SingletonHolder.INSTANCE;
 }
}

------------------------------------
Given: C
enum SingletonD{
 INSTANCE;
}

------------------------------------
Answer:

A. 是private建構子: private SingletonA(){}
B. 是protected建構子: protected SingletonB(){}
C. 是預設建構子: SingletonC(){}
D. 列舉,宣告private建構子

說明:
A. 無法使用SingletonA a = new SingletonA();,必須使用 SingletonA a = SingletonA.getInstance();。
B. 可以使用SingletonB b = new SingletonB();,證明不是Singleton設計模式。
C. 可以使用SingletonC c = new SingletonC();,證明不是Singleton設計模式。
D. 無法使用SingletonD d = new SingletonD();,必須使用 SingletonD d = SingletonD.INSTANCE;。

留言

這個網誌中的熱門文章

[Excel]國曆轉農曆VBA

「CSS」「div區塊介紹」 三欄式網頁排版設計

「生活」眉毛觀人