Java 调用其他类的类

Java 调用其他类的类,java,class,instantiation,composition,Java,Class,Instantiation,Composition,我有一些课 在facade中,我有一个starter类,它被实例化并从那里调用所有方法 然后我有一节汽车课,一节车主课,一节车库课和一节停车位课 所以。。。 起动机具有汽车属性。 汽车具有车主属性 汽车还具有车库属性 车库具有ParkingSpace属性 Stater类有一个getOwner()方法,它在Car类中调用getOwner()方法 private Car car; public Starter (String name){ car = new Car(new Owner(na

我有一些课

在facade中,我有一个starter类,它被实例化并从那里调用所有方法

然后我有一节汽车课,一节车主课,一节车库课和一节停车位课

所以。。。 起动机具有汽车属性。
汽车具有车主属性
汽车还具有车库属性
车库具有ParkingSpace属性

Stater类有一个
getOwner()
方法,它在Car类中调用
getOwner()
方法

private Car car;
public Starter (String name){
    car = new Car(new Owner(name);
}
上面的第三行实例化了Car和Owner对象。现在我可以从不同的类中调用不同的方法

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

我不明白的是我现在如何实例化Garage对象,以及根据什么实例化它?我的addParking()方法适用于Car,因为我在得到所有者时已经实例化了它。所以我现在不能去

Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z)));
或者我可以吗?这不会创建一个全新的汽车对象吗

我现在如何实例化Garage对象,以及我应该做什么 实例化它

通常,当我遇到这样的问题时,我会回到大自然和我的领域模型。
车库
类应仅与一个停车位耦合,因为
车库
必须有一个停车位,但它可能没有
汽车
或车内(尚未)

现在,您可以将
汽车
停放在此
车库
中,因此
车库
有一个方法:

public void park(Car car){
}
这些代码位现在可以通过以下方式链接:

Car car = new Car(owner);
Garage garage = new Garage(new ParkingSpace(...));
garage.park(car);
这不会创建一个全新的汽车对象吗


是,
Car-Car=新车(新停车位(新停车位(intx,inty,intz))
将创建一个新的
汽车
车库
和一个
停车空间
,,如果您调用构造函数确保您将创建车库的新实例。我认为您最好保留默认构造函数,并向车库提供getter和setter或adder方法(您的汽车是否存储在一个集合中?),以创建您的r对象之间的关系:稍后您可以考虑哪些关系不能被破坏,删除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...
     }
    }

对象的生命周期似乎非常不同。 我会把停车空间和停车场与汽车分开,只有在你需要的时候,我才会与一个设定者建立关系。 你需要考虑两件事: 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}

你为什么不在汽车上调用一个添加车库的方法呢?我只是想澄清一下,我不是在添加和删除汽车。永远只有一辆车。我现在做的是在车库里增加停车空间。以及从车库中移除停车位。停车位和汽车之间的唯一关系是,汽车有一个与其关联的车库,而车库有停车空间,可以在车库中添加或删除停车空间。我已经把车和车主实例化了。我如何根据汽车来实例化车库和停车位(以显示has-a关系并调用这些关系上的方法)对象的生命周期似乎非常不同。我会把停车空间和停车场与汽车分开,只在你需要的时候与一个二传手建立关系。
    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);