1

public class Elevator () { Button firstFloorbutton = ButtonFactory.getButtonInstance(this, 1); ボタン secondFloorbutton = ButtonFactory.getButtonInstance(this, 2); ボタン thirdFloorbutton = ButtonFactory.getButtonInstance(this, 3); ボタン fourFloorbutton = ButtonFactory.getButtonInstance(this, 4);

 Fan fan1 = FanFactory.getFanInstance(this);

 Light light1 = LightFactory.getInstance(this);

 private void goUp()
 {
    .....
 }

 private void goDown()
 {
   ......
 }

   .............   

 }

        ============================

 public class Button()
 {

   Elevator E;
   int floor;

   public button (Elevator E, int floor )
   {
    this.E = E;
    this.floor = floor;
   }

   public void buttonPressed()
   {

   //logic to determine which floor the elevator is currently at and determine whether to go up or down to reach "this.floor"

   E.goUp();  // if need to go up

   else

   E.goDown()   // if need to go down

   }
} 


    ==========================


    public class ButtonFactory()
    {

      public Button getButtonInstance(Elevator E, int floor)
      {
         Button b =new Button(E, floor);
         return b;
      }
    }

     ==================

    public class FanFactory(){ .................}

     =====================

    public class LightFactory() { ........... }


     ==========================

Elevator クラスと Button クラスの間にはどのような関係がありますか?

Kathy and Bert (SCJP)の 92 ページによると、 HAS-A 関係は継承ではなく使用に基づいています。つまり、クラス A のコードがクラス B のインスタンスへの参照を持っている場合、クラス A HAS-A B です。

私の例では、Elevator クラス コードには Button のインスタンスへの参照があり、Button には Elevator クラスのインスタンスへの参照があります。

誰でもこれについて明確にしてください。

4

2 に答える 2

3

エレベーターにはボタンがあります。実際には 4 つあるのですが、これらのボタンのそれぞれには、持つ関係があります。

Has-a は、より正式な 2 種類の関係 (関連付けと集約) を指すために使用されるやや非公式な用語です。どちらの場合も、関係の一方が他方へのポインターを持ちますが、意味論によって区別されます。アソシエーション関係では、最初の当事者が他方の当事者について知っていますが、それを完全に支配することはありません (あなたと同僚を考えてみてください)。 、または上司、または部下)、集合関係では、後者のパーティーは前者の一部であり、独立した存在はありません(あなたとあなたの肝臓を考えてください). この場合、ボタンは、単なる関連付け関係ではなく、エレベーターとの集約関係の従属端にあると言えます。

アソシエーションのその他の例としては、顧客とセールスマン、部門と従業員などがあります。集計の、Order と OrderLine、または Structure と Component。興味深いコーナー ケースは、カテゴリと製品、および注文と請求書です。

この種の関係の実際的な結果の 1 つは、オブジェクトの存続期間です。関連付けでは、最初のオブジェクトが消滅すると、2 番目のオブジェクトが生き残る可能性がありますが、集合では消滅します。エレベーターについて考えてみてください。エレベーターを削除した場合 (または、ライブ データ構造から削除して、少なくともガベージ コレクトした場合)、ボタンを存続させたいと思いますか?

于 2010-09-14T20:50:41.030 に答える
0

これは Has-A 関係であり、構成モデルを覚える簡単な方法です。Button クラスは Elevator クラスで構成されます。つまり、Button クラスには Elevator クラスがあります。

于 2010-09-14T20:25:54.190 に答える