LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

раньше клиент класса знал только про один объект - Car, а теперь ему приходится еще слушать про Engine. А как же инкапсуляция? Зачем ему нужно про этот Engine знать.

Нет. Клиенту класса car приходит уже сконструированный, ему не нужно знать про Engine.

class CarClient {
    private final Car car;

    CarClient(Car car) {
        this.car = car;
    }

    void useCar() {
        car.use();
    }
}

Про Engine нужно знать тому, кто конструирует весь граф объектов. Это может быть просто метод main, это может быть фреймворк типа Spring.

Исходная версия Legioner, :

раньше клиент класса знал только про один объект - Car, а теперь ему приходится еще слушать про Engine. А как же инкапсуляция? Зачем ему нужно про этот Engine знать.

Нет. Клиенту класса car приходит уже сконструированный, ему не нужно знать про Engine.

class CarClient {
    private final Car car;

    CarClient(Car car) {
        this.car = car;
    }

    void useCar() {
        car.use();
    }
}