2013-12-11 149 views
0

我有一個名爲Garden的類,其中包含鮮花陣列列表。我有一個方法,它返回類中的類的實例和向類中添加鮮花的方法。我如何在我的測試工具中爲課程的實例添加鮮花。我的代碼:將陣列列表中的對象添加到類的實例

public class Garden { 

    ArrayList<Flower> flowerbed = new ArrayList<Flower>(); 
    Hive hive = null; 

    private static Garden instance; 

    public static Garden getInstance(){ 
     if(instance == null){ 
      instance = new Garden(); 
     } 
     return instance; 
    } 

    public void addFlower(Flower flower){ 
     flowerbed.add(flower); 
    }//some methods omitted 
} 

如果我做的:

Flower f; 
Garden g = new Garden(); 
g.addFlower(f); 

新花添加到花園,但沒有花園的實例,因爲getInstance方法是靜態這是混淆了我如何在我的測試中使用它。

回答

2
Garden.getInstance().addFlower(new Flower()); 
Garden.getInstance().addFlower(new Flower()); 

您使用的是單件模式,所以你應該讓花園的構造私人

private Garden() {} 

此外,由於沒有理由的子類單身

public final class Garden 

調用花園getInstance總會無論誰調用它,都會返回相同的實例Garden

此外,你想確保flowerBed不是靜態的,就像你有。

private Arraylist<Flower> flowerBed = new ArrayList<>(); 
1

我可能誤解了你的問題,因爲答案看起來太瑣碎了,但爲了給課程添加鮮花,你應該簡單地使用你已經提供的addFlower方法。

public void testMethod() { 

    Flower one = new Flower(); 
    Flower two = new Flower(); 

    Garden garden = Garden.getInstance(); 
    garden.addFlower(one); 
    garden.addFlower(two); 
} 

編輯:正如Robbmjs的答案指出的,要正確應用單例模式,Garden的構造函數應該是私有的。

+0

這增加了方法的花園,但沒有花園的情況,據我可以從我的代碼是捉迷藏 – user2973447

+0

你的意思是順便告訴補充說:「法的花園,但不是的實例花園」?你的getInstance方法()會給你一個花園的單例實例,這是你添加花朵的實例。 – csvan

+0

感謝chrsva喊出來,但它的robbmj; D – robbmj