2014-12-17 2 views
-2

Я проходил через шаблон Bridge и получил несколько сомнений. Я получил код ниже с сайта, где я создал класс abstarct в качестве интерфейса.Проблема с мостом Java Bridge

abstract class Vehicle { 
    protected Workshop workShop1; 
    protected Workshop workShop2; 

    protected Vehicle(Workshop workShop1, Workshop workShop2) { 
     this.workShop1 = workShop1; 
     this.workShop2 = workShop2; 
    } 

    abstract public void manufacture(); 
} 


public interface Workshop { 
    abstract public void work(); 
} 

Сомнение вот почему мы создали конструктор, объявляя 2 объектов для интерфейса?

public class Car extends Vehicle { 

    public Car(Workshop workShop1, Workshop workShop2) { 
     super(workShop1, workShop2); 
    } 


    @Override 
    public void manufacture() { 
     System.out.print("Car "); 
     workShop1.work(); 
     workShop2.work(); 

    } 

} 

То же самое здесь, почему снова объявить конструктор при прохождении ссылочных объектов интерфейса?

+0

Что вы хотите сказать? – Jared

+0

Почему мы создали конструктор, объявляющий 2 объекта для интерфейса? Я не могу ПОНИМАТЬ ЭТОТ ВЕЩЬ – user2152452

+0

Не могли бы вы также поделиться ссылкой с учебником? – Stifler

ответ

0

Интерфейс определяет, а именно, интерфейс для общих объектов. Все объекты, реализующие интерфейс , должны реализовать методы, определенные в интерфейсе. Таким образом, у вас есть класс Car, который расширяет ваш abstract class Vehicle и таким образом должен реализовать метод void manufacture(). Кроме того, хотя классы, продолжающие Vehicle, будут также получить переменные, определенные в абстрактном классе. Кроме того, расширяющие классы должны вызвать один из конструкторов, определенных в абстрактном классе (если конструкторы не определены, то нет необходимости ничего называть).

Тот факт, что Vehicle имеет конструктор, который принимает два Workshop объектов означает, что, когда вы пытаетесь создать экземпляр любого транспортного средства (т.е. Car), вы должны обеспечить объекты, которые реализуют интерфейс Workshop.

Недостающая часть вашей головоломки - это конкретный класс, который реализует интерфейс Workshop. В качестве простейшего примера, если у вас:

public class NoWork implements Workshop{ 
    @Override 
    public void work(){ 
     // do no work 
    } 
} 

Тогда вы могли бы создать экземпляр Car класс следующим (в качестве примера):

public static void main(String ...args){ 
    final Workshop noWork1 = new NoWork(); 
    final Workshop noWork2 = new NoWork(); 
    final Vehicle car = new Car(noWork1, noWork2); 
} 

Обратите внимание, что поскольку NoWork реализует Workshop это также из типа Workshop, таким образом, законно объявлять noWork1 (и 2) как Workshop объектов, хотя они фактически NoWork объектов. Кроме того, обратите внимание, что поскольку Car расширяет Vehicle это найти объявить car как Vehicle, даже если это на самом деле Car (но помните CarявляетсяVehicle).

Просто чтобы прояснить, хотя, вы не обязательно нужно предоставить два Workshop классы для каждого проходящего класса Vehicle, вы могли бы иметь что-то вроде:

public class NoVehicle extends Vehicle{ 
    public NoVehicle(){ 
     super(null, null); 
    } 

    @Override 
    public void manufacture(){ 
     // do nothing...there's nothing to be done 
    } 
} 

Но обратите внимание, что любого расширения класса должен вызвать супер-конструктор.

+0

Точно Джаред Большое спасибо за объяснение. Пропущенный класс уже существует там, где я просматривал учебник. Точка, в которой я была смущена, была ** требованием конструктора **, обязательно ли это? и конкретно для этого шаблона? – user2152452

+0

Тот факт, что у транспортного средства есть конструктор, который берет два объекта мастерской, означает, что при попытке создать экземпляр любого автомобиля (например, автомобиль) вы должны предоставить объекты, которые реализуют интерфейс Workshop. Вот мой ответ, который вы дали спасибо за объяснение :) – user2152452

0

Если Вы видите диаграмму шаблона моста в учебнике link, они предположили, что существует два типа workshope

  1. Производитель
  2. Соберите

Так Тэй использовали два instacne из workshope Интерфейс один для Producer и один для Assemble.

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