Pattern di progettazione del ponte in Java

Oggi parleremo del pattern di progettazione del ponte in Java. Quando abbiamo gerarchie di interfacce sia nelle interfacce che nelle implementazioni, allora il pattern di progettazione del ponte viene utilizzato per separare le interfacce dall’implementazione e nascondere i dettagli di implementazione dai programmi client.

Il pattern di progettazione del ponte

Proprio come il pattern dell’adattatore, il pattern di progettazione del ponte è uno dei pattern di progettazione strutturale. Secondo GoF, il pattern di progettazione del ponte è:

Separa un’astrazione dalla sua implementazione in modo che le due possano variare indipendentemente

L’implementazione del pattern di progettazione del ponte segue il principio di preferire la composizione rispetto all’ereditarietà.

Esempio di pattern di progettazione del ponte in Java

Se diamo un’occhiata al pattern di progettazione del bridge con un esempio, sarà facile da capire. Supponiamo di avere una gerarchia di interfacce in entrambe le interfacce e le implementazioni come nell’immagine sottostante. Ora utilizzeremo il pattern di progettazione del bridge per separare le interfacce dalle implementazioni. Il diagramma UML delle classi e delle interfacce dopo l’applicazione del pattern del bridge sarà come nell’immagine sottostante. Osservate il bridge tra le interfacce Shape e Color e l’uso della composizione nell’implementazione del pattern del bridge. Ecco il codice Java per le interfacce Shape e Color. Color.java

package com.journaldev.design.bridge;

public interface Color {

	public void applyColor();
}

Shape.java

package com.journaldev.design.bridge;

public abstract class Shape {
	//Composizione - implementatore
	protected Color color;
	
	//costruttore con l'implementatore come argomento di input
	public Shape(Color c){
		this.color=c;
	}
	
	abstract public void applyColor();
}

Abbiamo le classi di implementazione Triangle e Pentagon come segue. Triangle.java

package com.journaldev.design.bridge;

public class Triangle extends Shape{

	public Triangle(Color c) {
		super(c);
	}

	@Override
	public void applyColor() {
		System.out.print("Triangle filled with color ");
		color.applyColor();
	} 

}

Pentagon.java

package com.journaldev.design.bridge;

public class Pentagon extends Shape{

	public Pentagon(Color c) {
		super(c);
	}

	@Override
	public void applyColor() {
		System.out.print("Pentagon filled with color ");
		color.applyColor();
	} 

}

Ecco le classi di implementazione per RedColor e GreenColor. RedColor.java

package com.journaldev.design.bridge;

public class RedColor implements Color{

	public void applyColor(){
		System.out.println("red.");
	}
}

GreenColor.java

package com.journaldev.design.bridge;

public class GreenColor implements Color{

	public void applyColor(){
		System.out.println("green.");
	}
}

Testiamo la nostra implementazione del pattern del bridge con un programma di test. BridgePatternTest.java

package com.journaldev.design.test;

import com.journaldev.design.bridge.GreenColor;
import com.journaldev.design.bridge.Pentagon;
import com.journaldev.design.bridge.RedColor;
import com.journaldev.design.bridge.Shape;
import com.journaldev.design.bridge.Triangle;

public class BridgePatternTest {

	public static void main(String[] args) {
		Shape tri = new Triangle(new RedColor());
		tri.applyColor();
		
		Shape pent = new Pentagon(new GreenColor());
		pent.applyColor();
	}

}

L’output del programma di esempio del pattern del bridge sopra è:

Triangle filled with color red.
Pentagon filled with color green.

Il design pattern del bridge può essere utilizzato quando sia l’astrazione che l’implementazione possono avere diverse gerarchie in modo indipendente e vogliamo nascondere l’implementazione dall’applicazione client.

Source:
https://www.digitalocean.com/community/tutorials/bridge-design-pattern-java