0

我有两节课:

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(...);
  }
}

现在主要是,我启动了一个 A 类的实例和一个 B 类的实例。在 B 类内部,每当我向他们出售物品时,我想更新购买的物品并实时调整 A 类实例的钱(即意味着,在 B 类的 sellMeItem 函数中。)因此我认为我需要 A 实例是全局的。如何从 B 类的 sellMeItem 函数内部到达主要的 A 对象?(和B类实例也是主要的)

4

2 回答 2

7

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

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

class B {

    private A a;

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

然后您可以a在 B 中访问。在您的主要内容中:

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

但是,这两个类如此密切相关的事实可能意味着您在它们之间划分职责的方式不是最佳的。

于 2012-12-13T18:33:16.717 回答
1

在这里应用观察者模式可能会更好。让 A 订阅 B 上的事件(您可以在 main 方法中连接它)。

为此,您可能需要为 B 上的观察者定义一个接口

public interface BObserver {

    void itemSold(Item item);

}

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

于 2012-12-13T18:34:03.993 回答