Categorías
Design Patterns Stories

Patrón de diseño de Java: Puente

En resumen, Bridge Design Pattern es una abstracción de dos capas.

El patrón de puente está destinado a «desacoplar una abstracción de su implementación para que los dos puedan variar de forma independiente». El puente usa encapsulación, agregación y puede usar herencia para separar responsabilidades en diferentes clases.

1. Historia del patrón de puente

El ejemplo de TV y control remoto (error tipográfico en el diagrama) puede demostrar las dos capas de abstracción. Tienes una interfaz para TV y una clase abstracta para control remoto. Como sabe, no es una buena idea hacer una clase concreta para ninguno de ellos, porque otros proveedores pueden realizar diferentes implementaciones.

2. Código Java de patrón de puente

Primero defina una interfaz de TV: ITV

public interface ITV {
	public void on();
	public void off();
	public void switchChannel(int channel);
}

Deje que Samsung implemente la interfaz ITV.

 
public class SamsungTV implements ITV {
	@Override
	public void on() {
		System.out.println("Samsung is turned on.");
	}
 
	@Override
	public void off() {
		System.out.println("Samsung is turned off.");
	}
 
	@Override
	public void switchChannel(int channel) {
		System.out.println("Samsung: channel - " + channel);
	}
}

Deje que Sony implemente la interfaz ITV.

public class SonyTV implements ITV {
 
	@Override
	public void on() {
		System.out.println("Sony is turned on.");
	}
 
	@Override
	public void off() {
		System.out.println("Sony is turned off.");
	}
 
	@Override
	public void switchChannel(int channel) {
		System.out.println("Sony: channel - " + channel);
	}
}
  Patrón de diseño de Java: Observador

El control remoto tiene una referencia al televisor.

public abstract class AbstractRemoteControl {
	/**
	 * @uml.property  name="tv"
	 * @uml.associationEnd  
	 */
	private ITV tv;
 
	public AbstractRemoteControl(ITV tv){
		this.tv = tv;
	}
 
	public void turnOn(){
		tv.on();
	}
 
	public void turnOff(){
		tv.off();
	}
 
	public void setChannel(int channel){
		tv.switchChannel(channel);
	}
}

Defina una clase de control remoto concreta.

public class LogitechRemoteControl extends AbstractRemoteControl {
 
	public LogitechRemoteControl(ITV tv) {
		super(tv);
	}
 
	public void setChannelKeyboard(int channel){
		setChannel(channel);
		System.out.println("Logitech use keyword to set channel.");
	}
}
public class Main {
	public static void main(String[] args){
		ITV tv = new SonyTV();
		LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
		lrc.setChannelKeyboard(100);	
	}
}

Producción:

Sony: canal – 100
Logitech usa la palabra clave para configurar el canal.

En resumen, el patrón Bridget permite dos capas de abstracción de implementación, en este caso, TV y control remoto. Por tanto, da más flexibilidad.

3. Patrón de puente en la plataforma Eclipse

El patrón de puente es uno importante que se utiliza en la arquitectura Eclipse.

  Historia de patrón de diseño de Java para Proxy - A Slutty Lady

Referencia:

1. Gamma, E, Helm, R, Johnson, R, Vlissides, J: Design Patterns, página 151. Addison-Wesley, 1995
2. Patrón de Puente Wiki

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *