2012-07-02 194 views
0

我有一些類。調用其他類的類

在外觀中,我有一個啓動類,它被實例化,並從那裏調用所有的方法。

然後,我有車階級,業主階級,一個車庫類和停車空間類

所以...... 入門有車的屬性。
汽車擁有所有者屬性。
汽車也有車庫屬性。
車庫具有ParkingSpace屬性

斯塔特類有一個getOwner()方法,該方法調用Car類

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

上面第三行實例化Car和業主對象getOwner()方法。這現在允許我調用各種類的各種方法。

我現在在Starter Class中有一個addParking()方法。 Starter Class的addParking()調用Car類的addParking(),然後調用GarageClass的addParking(),然後將停車位添加到存儲在車庫類中的集合中。

我不明白的是... 我現在如何實例化Garage對象,以及如何實例化它?我的addParking()方法適用於Car,因爲當我獲得Owner時,我已經實例化了這個。所以我現在不能去...

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

或者我可以嗎?不會這樣創建一個全新的Car對象嗎?

+1

爲什麼不叫上車的方法,它增加了車庫。 –

回答

2

我現在如何實例化Garage對象和我在哪些方面實例化它們? ?

通常,當我遇到這樣的問題時,我會回到大自然和我的領域模型。 Garage類應該只與一個停車位結合,因爲Garage必須有停車位,但它可能沒有Car或其中的一個(尚)。現在

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

,你可以停在這Garage一個Car是很有意義的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

0

。我認爲你最好保留默認的構造函數,並提供getter和setter或addder方法(將你的汽車存儲在集合中?)到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... 
    } 
    } 

你的對象的生命週期似乎很不同。 我會將ParkingSpace和公園與Car分開分開,並且只在需要時才與Setter建立關係。 你需要考慮2件事: 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); 
+0

只是爲了澄清 - 我不添加和刪除汽車。總是隻有一輛車。我正在做的是將停車位添加到車庫。並從車庫中刪除停車位。只有停車位和汽車之間的關係是,汽車有一個與之相關的車庫,並且車庫具有可以從車庫添加和移除的停車位。我已經有車和車主實例化了。我如何根據汽車實例化車庫和停車位(以顯示具有這種關係並對其調用方法) – user1031551

+0

對象的生命週期似乎非常不同。 我會將ParkingSpace和Park與Car分開分開,並且只在需要時纔會與二傳手建立關係。 – JayZee