Вы находитесь на странице: 1из 5

Ejemplo de Patron Bridge

El patrón bridge desvincula una abstracción de su implementación, de manera que ambas puedan variar de
forma independiente.

Se desea construir un programa que produzca y ensamble dos tipos de vehículos (carros y bicicletas), cual
sería la estructura usando patrón de diseño bridge.

Estructura del patron


Solución sin patrón:

Problemas de esta solución:

El primero es que cada subclase depende directamente, hereda, de un padre de modo que cada
vez que quiera cambiar algo de este; sus hijos se verán afectados. Llámesele acoplamiento. A la
izquierda si cambio algo de Bike o de Car, sus respectivos ProduceX y AsempleX se verán
afectados.

Solución usando patrón Bridge

Véase, sin embargo, como con el diseño de la parte superior la vinculación del Produce o
Assemble solo es efectiva en tanto que:

Manufacture() {

Manufacture1.work();
Manufacture2.work();
}

Y por tanto un cambio en Bike o en Car no tendrá ninguna consecuencia en Produce o Assemble.
Implementación en código Java:

package com.javapapers.designpattern;

/**
* abstraction in bridge pattern
* */
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();


}

package com.javapapers.designpattern;

/**
* Refine abstraction 1 in bridge pattern
*/
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();

package com.javapapers.designpattern;

/**
* Refine abstraction 2 in bridge pattern
*/
public class Bike extends Vehicle {

public Bike(Workshop workShop1, Workshop workShop2) {


super(workShop1, workShop2);
}

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

package com.javapapers.designpattern;

/**
* Implementor for bridge pattern
* */
public interface Workshop {
abstract public void work();
}

package com.javapapers.designpattern;

/**
* Concrete implementation 1 for bridge pattern
* */
public class Produce implements Workshop {

@Override
public void work() {
System.out.print("Produced");
}

package com.javapapers.designpattern;

/**
* Concrete implementation 2 for bridge pattern
* */
public class Assemble implements Workshop {

@Override
public void work() {
System.out.println(" Assembled.");
}

package com.javapapers.designpattern;

/*
* Demonstration of bridge design pattern
*/
public class BridgePattern {

public static void main(String[] args) {

Vehicle vehicle1 = new Car(new Produce(), new Assemble());


vehicle1.manufacture();
Vehicle vehicle2 = new Bike(new Produce(), new Assemble());
vehicle2.manufacture();

}
}

Output:
Car Produced Assembled.
Bike Produced Assembled.

Вам также может понравиться