2013-12-11 184 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