1

public class Elevator () { Button firstFloorbutton = ButtonFactory.getButtonInstance(this, 1); 按钮 secondFloorbutton = ButtonFactory.getButtonInstance(this, 2); 按钮第三层按钮 = ButtonFactory.getButtonInstance(this, 3); 按钮fourthFloorbutton = 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 类就具有 B 类。

在我的示例 Elevator 类代码中引用了 Button 的实例,而 Button 引用了 Elevator 类的实例。

任何人都可以澄清这一点。

4

2 回答 2

3

电梯有一个按钮。实际上,它有四个,但是对于每个按钮,都有一个has-a 关系。

Has-a 是一个有点非正式的术语,用于指代两种更正式的关系:关联和聚合。在这两种情况下,关系中的一方都有指向另一方的指针,但它们通过语义来区分:在关联关系中,第一方知道另一方,但并不完全支配它(想想你和同事,或老板,或下属),而在聚合关系中,后者是前者的一部分,没有独立存在(想想你和你的肝脏)。在这种情况下,我会说 Button 更具体地位于与 Elevator 的聚合关系的从属端,而不仅仅是关联关系。

关联的其他示例可能是客户和销售员,或部门和员工。聚合,Order 和 OrderLine,或者 Structure 和 Component。有趣的极端案例是类别和产品,以及订单和发票。

这种关系的一个实际结果是对象的生命周期:在关联中,如果第一个对象死亡,第二个对象可能会存在,但在聚合中,它将死亡。想想你的电梯:如果你删除了一个(或者从你的实时数据结构中删除它,至少让它被垃圾收集),你希望按钮存活吗?

于 2010-09-14T20:50:41.030 回答
0

它是一种 Has-A 关系,这是一种记住组合模型的简单方法。Button类由Elevator类组成;即 Button 类有一个 Elevator 类。

于 2010-09-14T20:25:54.190 回答