Otro patrón de diseño del software es el llamado Puente o Bridge en inglés. Se trata de una forma de refactorizar los códigos fuentes para que tengan bajo acoplamiento y alta cohesión, distribuyendo las características y haciendo más manejable todo el programa en su conjunto.
Es más fácil verlo para entender en qué consiste exactamente.
Punto de partida, tenemos muchos conceptos que varían entre sí muy poco
Por ejemplo supongamos que estamos trabajando con vehículos. Si ahora queremos añadir el color al esquema anterior, o un tipo de motor nuevo híbrido, deberíamos de ir añadiendo clases exponencialmente.
La forma de solucionar este problema haciendo más mantenible el código fuente es hacer clases puente.
Extendiendo funcionalidades usando puentes
Por ejemplo, podemos hacer un puente con los colores, y otro con los motores. El de los colores nos podría quedar algo tal que así:
El puente con los tipos de motores podría ser algo tal que así:
Sin usar puentes tendríamos que haber hecho una clase para cada combinación de características:
- Coche rojo eléctrico.
- Coche rojo híbrido.
- Coche rojo gasolina.
- Coche verde eléctrico.
- Coche verde híbrido.
- Coche verde gasolina.
- Coche azul eléctrico.
- Coche azul híbrido.
- Coche azul gasolina.
- Moto rojo eléctrico.
- Moto rojo híbrido.
- Moto rojo gasolina.
- Moto verde eléctrico.
- Moto verde híbrido.
- Moto verde gasolina.
- Moto azul eléctrico.
- Moto azul híbrido.
- Moto azul gasolina.
- Camión rojo..
- Etcétera.
A la larga, hacer una clase para cada tipo no es mantenible, la solución es hacer los citados puentes.
Programando estos puentes en PHP
Todo esto anterior, se traduce en algo tal que así, por ejemplo una clase src/Bridge/Vehicle.php:
<?php
interface Vehicle extends Color, Motor
{
}
La clase src/Bridge/Color.php:
<?php
interface Color
{
}
La clase src/Bridge/Motor.php:
<?php
interface Motor
{
}
Los tres colores src/Bridge/Red.php, src/Bridge/Green.php y src/Bridge/Blue.php:
<?php
class Red implements Color
{
}
<?php
class Green implements Color
{
}
<?php
class Blue implements Color
{
}
Las clases para los tipos de motores src/Bridge/MotorElectric.php, src/Bridge/MotorGasoil.php o src/Bridge/MotorHybrid.php:
<?php
class MotorElectric implements Motor
{
}
<?php
class MotorGasoil implements Motor
{
}
<?php
class MotorHybrid implements Motor
{
}
Y las clases para src/Bridge/Car.php, src/Bridge/Motorbike.php y src/Bridge/Truck.php:
<?php
class Car implements Vehicle
{
}
<?php
class Motorbike implements Vehicle
{
}
<?php
class Truck implements Vehicle
{
}
Y así sucesivamente, tendremos el código poco acoplado y bien cohesionado para darle un buen mantenimiento.