Java 调用其他类的类
我有一些课 在facade中,我有一个starter类,它被实例化并从那里调用所有方法 然后我有一节汽车课,一节车主课,一节车库课和一节停车位课 所以。。。 起动机具有汽车属性。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
汽车具有车主属性
汽车还具有车库属性
车库具有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);