我有一个名为Garden的课程,其中包含一个花的arraylist。我有一个方法,它返回类中的类的实例和一个向类添加花的方法。如何在我的测试工具中为类的实例添加鲜花。我的代码:
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方法是静态的,所以在我的testharness中如何使用它会使我感到困惑。
答案 0 :(得分:2)
Garden.getInstance().addFlower(new Flower());
Garden.getInstance().addFlower(new Flower());
您正在使用单例模式,因此您应该将Garden的构造函数设为私有
private Garden() {}
此外,由于没有理由继承单身人士
public final class Garden
调用花园getInstance
将始终返回Garden
的同一个实例,无论是谁调用它。
此外,您还要确保flowerBed不是静态的,就像您一样。
private Arraylist<Flower> flowerBed = new ArrayList<>();
答案 1 :(得分: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构造函数应该是私有的。