Brugontwerp Patroon in Java

Vandaag zullen we kijken naar het Bridge Design Pattern in Java. Wanneer we interface-hiërarchieën hebben in zowel interfaces als implementaties, wordt het bridge design pattern gebruikt om de interfaces los te koppelen van de implementatie en de implementatiedetails te verbergen voor de clientprogramma’s.

Bridge Design Pattern

Net als het Adapter-patroon is het bridge design pattern een van de structurele ontwerppatronen. Volgens GoF is het bridge design pattern:

Koppel een abstractie los van de implementatie, zodat deze onafhankelijk van elkaar kunnen variëren

De implementatie van het bridge design pattern volgt het idee om de voorkeur te geven aan compositie boven overerving.

Voorbeeld van het Bridge Design Pattern in Java

Als we kijken naar het brugontwerp patroon met een voorbeeld, zal het gemakkelijker te begrijpen zijn. Laten we zeggen dat we een interfacehiërarchie hebben in zowel interfaces als implementaties zoals in onderstaande afbeelding. Nu zullen we het brugontwerp patroon gebruiken om de interfaces te ontkoppelen van de implementatie. Het UML-diagram voor de klassen en interfaces na het toepassen van het brugpatroon zal eruitzien als onderstaande afbeelding. Let op de brug tussen de Shape en Color interfaces en het gebruik van compositie bij het implementeren van het brugpatroon. Hier is de Java-code voor de Shape en Color interfaces. Color.java

package com.journaldev.design.bridge;

public interface Color {

	public void applyColor();
}

Shape.java

package com.journaldev.design.bridge;

public abstract class Shape {
	//Compositie - implementor
	protected Color color;
	
	//constructor met implementor als invoerargument
	public Shape(Color c){
		this.color=c;
	}
	
	abstract public void applyColor();
}

We hebben Triangle en Pentagon implementatieklassen zoals hieronder. 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();
	} 

}

Hier zijn de implementatieklassen voor RedColor en 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.");
	}
}

Laten we onze brugpatroonimplementatie testen met een testprogramma. 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();
	}

}

De uitvoer van bovenstaand brugpatroonvoorbeeldprogramma is:

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

Het bridge-ontwerppatroon kan worden gebruikt wanneer zowel de abstractie als de implementatie onafhankelijk van elkaar verschillende hiërarchieën kunnen hebben en we de implementatie willen verbergen voor de clienttoepassing.

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