2012-07-02 5 views
0

У меня есть несколько классов.классы, вызывающие другие классы

В фасаде у меня есть класс стартера, который создается и вызывает все методы оттуда.

Тогда у меня есть класс автомобиля, а владелец класс, класс гараж и парковочное место класс

Итак ... Starter имеет атрибут Car.
Автомобиль имеет атрибут владельца.
Автомобиль также имеет атрибут Garage.
гараж имеет приписывать ParkingSpace

Статера класс имеет getOwner() метод, который вызывает метод getOwner() в классе Car

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

В третьей строке выше инстанцирует автомобиль и объект Владельца. И теперь это позволяет мне называть различные методы из разных классов.

У меня теперь есть метод addParking() в классе стартеров. addParking() из класса Starter вызывает addParking() из класса Car, который, в свою очередь, вызывает addParking() из GarageClass, который тогда был местом для парковки, добавленным в коллекцию, хранящуюся в классе Garage.

Что я не понимаю ... как мне создать экземпляр объекта Garage и с точки зрения его создания? Мой метод addParking() работает до Car, потому что я уже создал это, когда получил владельца. Так что я не могу сейчас пойти ...

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

Или я могу? Не будет ли это создать совершенно новый объект автомобиля?

+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); 

Wont this create совершенно новый объект автомобиля?

Да, Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z))); создаст новый Car, Garage и ParkingSpace

0

, если вы звоните в конструктор, что вы будете создавать новый экземпляр гаража. Я думаю, вам лучше сохранить конструкторы по умолчанию и предоставить геттеры, сеттеры или методы суммирования (ваши автомобили, хранящиеся в коллекции?) В Garage, чтобы создать отношения между вашими объектами: позже вы можете думать о том, какие отношения не могут быть уничтожены , стереть сеттер и создать связь через конструктор.

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} 

и в коде вы бы:

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

Жизненный цикл ваших объектов кажется совершенно отличным. Я хотел бы связать парковку и парк отдельно от автомобиля и создать отношения с сеттером, только если вам это нужно. – JayZee

Смежные вопросы