2010-06-08 244 views
3

請告訴我創建實例

public class A{ 

    private static A instance = new A(); 
    public static A getInstance() { return instance; 
     } 
    public static void main(String[] args) { 
      A a= A.getInstance(); 
     } 
} 

public class B{ 
    public B(){}; 


    public static void main(String[] args) { 
    B b= new B(); 
    } 
} 

由於Java的構造函數的聲明的兩種方法之間的差異A

+0

定義默認構造函數只有一種方法。你展示的是創建類的實例的兩種方法。 – 2010-06-08 02:47:30

+0

這是功課嗎? – 2010-06-08 07:10:15

回答

11
  • 類應該是一個Singleton,其中您只能有一個A實例。您可以通過調用來檢索該單個實例

在軟件工程中,單 圖案是用於 實現的 單身的數學概念的設計圖案,通過限制 實例化的類的,以一個 對象。這在正好是 需要一個對象來協調整個系統的動作 時非常有用。

有幾種方法去這個根據您的要求:

public class A{ 
    private static A instance = new A(); 
    private A(){} // private constructor 
    public static A getInstance() {return instance;} 
} 

或不創建實例,直到第一次調用

public class A{ 
    private static A instance = null; 
    private A(){} // private constructor 
    public static A getInstance() { 
     if(instance == null){ 
      instance = new A(); // create the one instance. 
     } 
     return instance; 
    } 
} 
  • B類是一類用一個沒有參數的構造函數。你可以通過調用new B();
+0

謝謝,這是我期待的術語。 – aladine 2010-06-08 02:43:10

5

它看起來像一個在執行模式的嘗試創建只要你想裏許多實例,但它並不完全正確的 - 它應該有一個私人的構造函數:

class A { 
private static final A INSTANCE = new A(); 
private A() { } 
public static A getInstance() { return INSTANCE; } 
}

這可以確保在應用程序中只存在一個A的實例 - 如果任何其他對象需要使用A的實例來執行某項操作,則唯一可以獲取的實例是通過getInstance()方法,該方法返回相同的所有的時間。

使用B,您可以根據需要擁有儘可能多的B實例,並且任何其他對象都可以自由創建B的新實例(如果它選擇)。

+0

謝謝。這是非常明確的答案 – aladine 2010-06-08 02:43:41

0

在第一種情況下,只有一個可用實例。在第二種情況下,可以有儘可能多的情況。你需要在第一種情況下使構造函數保持私有。