Java中的全局对象?

时间:2012-12-13 18:30:51

标签: java

我有两个班级:

public class A{
   int money;
   ArrayList<Item> boughtItems;
   .
   .
   public void addBoughtItem(Item item){
      .
      .
   }
   public void adjustMoney(int adjustAmount){
      money = money + adjustamount;
   }
}

和另一个班级:

public class B{
  ArrayList<Item> itemsForSale;
  .
  .
  public Item sellMeItem(Item item){
    .
    .
    return itemsForSale.get(...);
  }
}

现在在main中,我启动了一个A类实例和一个B类实例。 在B类中,每当我向他们出售一个项目时,我想更新purchaseItems并实时调整A类实例的资金(也就是说,在B类的sellMeItem函数内) 因此我认为我需要A实例是全局的。 如何从B类sellMeItem函数内部到达主要的A对象? (而B类实例也是主要的)

2 个答案:

答案 0 :(得分:7)

  

因此我认为我需要A实例是全球性的。

实际上,您可以简单地将对A实例的引用传递给B,例如通过构造函数:

class B {

    private A a;

    public B(A a) {
        this.a = a;
    }
}

然后你可以在B中访问a。在你的主要:

A a = new A();
B b = new B(a);

然而,这两个类密切相关的事实可能意味着你在它们之间分配责任的方式并不是最佳的。

答案 1 :(得分:1)

在这里应用observer pattern可能更好。设A给B上的事件(你可以在main方法中连接它)。

为此,您可能希望为B

上的观察者定义一个接口
public interface BObserver {

    void itemSold(Item item);

}

并且有一个实现这个接口。这样,不同类型的多个观察者可以注册到B。