Поиск…


Реализация моста в java

Мостовой шаблон отделяет абстракцию от реализации, так что оба могут варьироваться независимо друг от друга. Это было достигнуто с составом, а не с наследованием.

Диаграмма моста UML из Википедии:

введите описание изображения здесь

У вас есть четыре компонента в этом шаблоне.

Abstraction : он определяет интерфейс

RefinedAbstraction : он реализует абстракцию:

Implementor : он определяет интерфейс для реализации

ConcreteImplementor : он реализует интерфейс Implementor.

The crux of Bridge pattern : две ортогональные иерархии классов с использованием композиции (и без наследования). Иерархия абстракции и иерархия реализации могут варьироваться независимо. Внедрение никогда не ссылается на абстракцию. Абстракция содержит интерфейс реализации в качестве члена (через композицию). Эта композиция снижает еще один уровень иерархии наследования.

Настоящее слово Случай использования:

Включите различные транспортные средства, чтобы иметь обе версии ручной и автоматической системы передач.

Пример кода:

/* Implementor interface*/
interface Gear{
    void handleGear();
}

/* Concrete Implementor - 1 */
class ManualGear implements Gear{
    public void handleGear(){
        System.out.println("Manual gear");
    }
}
/* Concrete Implementor - 2 */
class AutoGear implements Gear{
    public void handleGear(){
        System.out.println("Auto gear");
    }
}
/* Abstraction (abstract class) */
abstract class Vehicle {
    Gear gear;
    public Vehicle(Gear gear){
        this.gear = gear;
    }
    abstract void addGear();
}
/* RefinedAbstraction - 1*/
class Car extends Vehicle{
    public Car(Gear gear){
        super(gear);
        // initialize various other Car components to make the car
    }
    public void addGear(){
        System.out.print("Car handles ");
        gear.handleGear();
    }
}
/* RefinedAbstraction - 2 */
class Truck extends Vehicle{
    public Truck(Gear gear){
        super(gear);
        // initialize various other Truck components to make the car
    }
    public void addGear(){
        System.out.print("Truck handles " );
        gear.handleGear();
    }
}
/* Client program */
public class BridgeDemo {    
    public static void main(String args[]){
        Gear gear = new ManualGear();
        Vehicle vehicle = new Car(gear);
        vehicle.addGear();
        
        gear = new AutoGear();
        vehicle = new Car(gear);
        vehicle.addGear();
        
        gear = new ManualGear();
        vehicle = new Truck(gear);
        vehicle.addGear();
        
        gear = new AutoGear();
        vehicle = new Truck(gear);
        vehicle.addGear();
    }
}

выход:

Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear

Объяснение:

  1. Vehicle - это абстракция.
  2. Car и Truck - это две конкретные реализации Vehicle .
  3. Vehicle определяет абстрактный метод: addGear() .
  4. Gear - интерфейс реализации
  5. ManualGear и AutoGear - это две реализации Gear
  6. Vehicle содержит implementor интерфейс , а не реализации интерфейса. Compositon интерфейса реализации является ключевым в этом шаблоне: он позволяет абстракции и реализации меняться независимо друг от друга.
  7. Car и Truck определяют реализацию (переопределены абстракции) для абстракции: addGear() : Он содержит Gear - либо Manual или Auto

Используйте случай (ы) для шаблона Bridge :

  1. Абстракция и реализация могут изменяться независимо друг от друга, и они не связаны во время компиляции
  2. Карта ортогональных иерархий - одна для абстракции и одна для реализации .


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow