0

我有一些课。

在外观中,我有一个启动类,它被实例化并从那里调用所有方法。

然后我有汽车类,车主类,车库类和停车位类

所以... Starter 有一个 Car 属性。
汽车具有所有者属性。
汽车也有车库属性。
Garage 有一个 ParkingSpace 属性

Stater 类有一个getOwner()方法调用getOwner()Car 类中的方法

private Car car;
public Starter (String name){
    car = new Car(new Owner(name);
}

上面的第三行实例化了 Car 和 Owner 对象。现在,这允许我从各种类中调用各种方法。

我现在addParking()在 Starter Class 中有一个方法。Starter 类中的 addParking() 调用 Car 类中的 addParking(),然后又调用 GarageClass 中的 addParking(),然后将停车位添加到存储在 Garage 类中的集合中。

我不明白的是......我现在如何实例化 Garage 对象以及我要实例化它的内容?我的 addParking() 方法适用于 Car,因为我在获得 Owner 时已经实例化了它。所以我现在不能去...

Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z)));

或者我可以吗?这不会创建一个全新的 Car 对象吗?

4

2 回答 2

2

我现在如何实例化 Garage 对象以及如何实例化它?

通常,当我遇到这样的问题时,我会回到自然和我的领域模型。该类Garage应仅与一个停车位相结合,因为Garage必须有一个停车位,但它可能没有 aCar或 an (还)。

public class Garage{
  public Garage(ParkingSpace parkingSpace){
     //...
  }
}

现在,您可以将 a 停Car在其中,因此拥有一个方法Garage是有意义的:Garage

public void park(Car car){
}

现在可以通过以下方式链接这些代码位:

Car car = new Car(owner);
Garage garage = new Garage(new ParkingSpace(...));
garage.park(car);

这不会创建一个全新的 Car 对象吗?

是的,Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z)));将创建一个新CarGarageParkingSpace

于 2012-07-02T19:38:18.250 回答
0

如果您确定调用构造函数,您将创建一个新的车库实例。我认为您最好保留默认构造函数,并为 Garage 提供 getter 和 setter 或 adder 方法(您的汽车是否存储在集合中?)以创建您的对象之间的关系:稍后您可以考虑哪些关系不能被破坏,擦除setter并通过构造函数创建关系。

   class Garage { 

    public Garage(){}

    private ParkingSpace ps;

    public void setParkingSpace(ParkingSpace ps){
      this.ps = ps;
    }

    public ParkingSpace getParkingSpace(){
      return ps;
    }
    public void addCar(Car car){
     // add  to some collection...
     }
    public void removeCar(Car car){
      // and remove...
     }
    }

您的对象的生命周期似乎非常不同。我会将 ParkingSpace 和 Park 与 Car 分开,并仅在需要时才与 setter 建立关系。你需要考虑两件事:1)我需要什么来创建一个对象?它还依赖于哪些其他对象?2)你的关系是只读的还是读写的?似乎您不需要公园来证明汽车。如果不是这种情况,请在拥有汽车之前创建公园,这是唯一的另一种方式。

    class ParkingSpace{
        private int x;
        private int y;
        private int z;

      public ParkingSpace(int x, int y,int z){
        this.x = x;
        this.y = y;
        this.z = z;
     }

     //... other methods
    }

    class  Park {

       private final List<ParkingSpace> parkingSpaces = new ArrayList<ParkingSpace>();

       public void addParkSpace(ParkingSpace ps){
         parkingSpaces.add(ps);
       }
       // other methods...

    }
     }

    class Car {

       private final Owner owner;
       private Park park;
       public Car(Owner o){
           this.owner = o;
       }

       public Owner getOwner(){
           return owner;
       }

       public Park getPark(){ return park}
       public void setPark(Park p){park = p}

在代码中您将拥有:

Owner o = new Owner("John Doe");
Car c = new Car(o);
Park p = new Park();
ParkingSpace ps = new ParkingSpace(1,2,3);
p.addParkSpace(ps);
car.setPark(p);
于 2012-07-02T19:45:12.193 回答