我有一些课程。
在外观中,我有一个初学者类,它被实例化并从那里调用所有方法。
然后我有一个汽车类,车主类,车库类和停车位类
所以...
Starter具有Car属性
Car具有Owner属性。
Car还具有Garage属性。
Garage有一个ParkingSpace属性
Stater类有一个getOwner()
方法,可以在Car类中调用getOwner()
方法
private Car car;
public Starter (String name){
car = new Car(new Owner(name);
}
上面的第三行实例化了Car和Owner对象。现在,这允许我从各个类中调用各种方法。
我现在在Starter Class中有一个addParking()
方法。
来自Starter Class的addParking()从Car Class调用addParking(),然后从GarageClass调用addParking(),然后将停车位添加到存储在Garage Class中的集合中。
我无法理解的是...... 我现在如何实例化Garage对象以及我实例化它?我的addParking()方法适用于Car,因为我有当我得到所有者时已经实例化了这个。所以我现在不能去......
Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z)));
或者我可以吗?这不会创建一个全新的Car对象吗?
答案 0 :(得分:2)
我现在如何实例化Garage对象以及我该怎样做 实例化它?
通常,当我遇到这些问题时,我会回归自然和我的领域模型。
Garage
课程应仅与停车位相结合,因为Garage
必须有停车位,但可能没有Car
或其中(还有)。
public class Garage{
public Garage(ParkingSpace parkingSpace){
//...
}
}
现在,您可以在此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)));
会创建新的Car
,Garage
和ParkingSpace
答案 1 :(得分:0)
如果你调用构造函数肯定你会创建一个新的Garage实例。我认为你最好保留默认的构造函数并提供getter和setter或adder方法(你的汽车存储在集合中吗?)到Garage来创建你的对象之间的关系:稍后你可以考虑哪些关系不能被破坏,擦除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)你的关系只读或读写? 你似乎不需要一个公园来反映汽车。如果不是这种情况,那就在拥有Car之前创建Park,这是唯一的另一种方式。
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);