0

私は2つのクラスを持っています:

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);

ただし、2 つのクラスが非常に密接に関連しているという事実は、おそらく、それらの間で責任を分割する方法が最適ではないことを意味します。

于 2012-12-13T18:33:16.717 に答える
1

ここではオブザーバー パターンを適用する方がよいでしょう。A が B のイベントにサブスクライブできるようにします (メイン メソッドでこれを配線できます)。

これを行うには、おそらく B のオブザーバー用のインターフェイスを定義する必要があります。

public interface BObserver {

    void itemSold(Item item);

}

そして、A にこのインターフェースを実装してもらいます。このようにして、異なるタイプの複数のオブザーバーを B に登録できます。

于 2012-12-13T18:34:03.993 に答える