Design patterns
Patrón de puente
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:
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:
-
Vehicle
es una abstracción. -
Car
yTruck
son dos implementaciones concretas deVehicle
. -
Vehicle
define un método abstracto:addGear()
. -
Gear
es la interfaz del implementador. -
ManualGear
yAutoGear
son dos implementaciones deGear
-
Vehicle
contiene la interfaz delimplementor
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. -
Car
yTruck
definen implementación (abstracción redefinida) para la abstracción:addGear()
: ContieneGear
-Manual
oAuto
Caso (s) de uso para el patrón de puente :
- La abstracción y la implementación pueden ser independientes entre sí y no están vinculadas en el momento de la compilación
- Mapa de jerarquías ortogonales: una para abstracción y otra para implementación .