Buscar..


Implementación de patrón puente en java

El patrón de puente desacopla la abstracción de la implementación para que ambos puedan variar independientemente. Se ha logrado con la composición en lugar de la herencia.

Puente UML diagrama de wikipedia:

introduzca la descripción de la imagen aquí

Tienes cuatro componentes en este patrón.

Abstraction : define una interfaz.

RefinedAbstraction : Implementa la abstracción:

Implementor : define una interfaz para la implementación.

ConcreteImplementor : Implementa la interfaz del implementador.

The crux of Bridge pattern : dos jerarquías de clases ortogonales que usan composición (y no herencia). La jerarquía de abstracción y la jerarquía de implementación pueden variar independientemente. Implementación nunca se refiere a la abstracción. La abstracción contiene la interfaz de implementación como miembro (a través de la composición). Esta composición reduce un nivel más de jerarquía de herencia.

Caso de uso de la palabra real:

Permitir que diferentes vehículos tengan ambas versiones de sistema manual y automático.

Código de ejemplo:

/* 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();
    }
}

salida:

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

Explicación:

  1. Vehicle es una abstracción.
  2. Car y Truck son dos implementaciones concretas de Vehicle .
  3. Vehicle define un método abstracto: addGear() .
  4. Gear es la interfaz del implementador.
  5. ManualGear y AutoGear son dos implementaciones de Gear
  6. Vehicle contiene la interfaz del implementor en lugar de implementar la interfaz. Compositon de la interfaz del implementador es el eje de este patrón: permite que la abstracción y la implementación varíen independientemente.
  7. Car y Truck definen implementación (abstracción redefinida) para la abstracción: addGear() : Contiene Gear - Manual o Auto

Caso (s) de uso para el patrón de puente :

  1. La abstracción y la implementación pueden ser independientes entre sí y no están vinculadas en el momento de la compilación
  2. Mapa de jerarquías ortogonales: una para abstracción y otra para implementación .


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow