2010-03-02 88 views
5

如何在Java類中限制對象的創建不超過3個?如何在Java類中限制對象的創建不超過3個?

你能告訴我怎麼做嗎?

+2

您是否指的是erm三重設計模式?正如在一個給定的類中恰好有三個實例? – 2010-03-02 08:59:12

+0

我不明白你的問題到底是什麼...... – romaintaz 2010-03-02 08:59:20

+3

在某些課程中,它似乎是一個常見的作業/問題。我經常看到這個問題很多次(幾乎總是3),我還沒有看到這個限制的一個很好的理由。 – 2010-03-02 08:59:59

回答

7

通過工廠Instanciate你的類(見設計模式),並使用簡單的計數器將其限制爲3個實例。

+0

簡單的靜態計數器並使工廠方法同步。 – 2010-03-10 17:14:20

1

工廠模式是要走的路。或者可以使用靜態計數器。需要注意線程安全。

7

我們可以限制在如下Singleton設計圖案通過稍加修改特定類對象的創建:

public class LimitClass { 

    private static LimitClass limInstance; 
    public static int objCount = 0; 

    private LimitClass(){ 
     objCount++; 
    } 

    public static synchronized LimitClass getLimInstance(){ 
     if(objCount < 3){ 
      limInstance = new LimitClass(); 
     } 
     return limInstance; 
    } 
} 

public class LimitObjectCreationTest { 

    public static void main(String[] args) { 

     LimitClass obj1 = LimitClass.getLimInstance(); 
     LimitClass obj2 = LimitClass.getLimInstance(); 
     LimitClass obj3 = LimitClass.getLimInstance(); 
     LimitClass obj4 = LimitClass.getLimInstance(); 
     LimitClass obj5 = LimitClass.getLimInstance(); 
     LimitClass obj6 = LimitClass.getLimInstance(); 

     System.out.println(obj1); 
     System.out.println(obj2); 

     System.out.println(obj3); 
     System.out.println(obj4); 
     System.out.println(obj5); 
     System.out.println(obj6); 
     } 
} 

的上面的代碼輸出是這樣的:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

創建三個不同的對象後,它會一次又一次地重複相同的第三個對象。它不是創造不同的對象。

0

爲什麼不分配limInstance = null;在其他情況下在getLimInstance()?在這種情況下,它不會提供obj3重複?

public static synchronized InstanceClass getLimInstance() 
{ 
     if(objCount < 3){ 
      limInstance = new InstanceClass(); 
     } 
     else 
     { 
      limInstance=null; 
     } 
     return limInstance; 
    } 


public class LimitObjectCreationTest { 


    public static void main(String[] args) { 
    InstanceClass obj1 = InstanceClass.getLimInstance(); 
    InstanceClass obj2 = InstanceClass.getLimInstance(); 
    InstanceClass obj3 = InstanceClass.getLimInstance(); 
    InstanceClass obj4 = InstanceClass.getLimInstance(); 
    InstanceClass obj5 = InstanceClass.getLimInstance(); 
    InstanceClass obj6 = InstanceClass.getLimInstance(); 

    System.out.println(obj1); 
    System.out.println(obj2); 

    System.out.println(obj3); 
    System.out.println(obj4); 
    System.out.println(obj5); 
    System.out.println(obj6); 

    System.out.println(obj3); 
    } 

}

結果是這樣的:

[email protected]

[email protected]

[email protected]

null

[email protected]

0

您需要修改單,並創建三個objects.ans寫三篇方法,每個方法返回的對象等作爲回報不同的三個對象並在需要時使用。它主要使用不需要將變量或對象聲明爲靜態,因爲始終返回相同的對象。