// Tutorial //

Bridge Design Pattern in Java

Published on August 3, 2022
Default avatar
By Pankaj
Developer and author at DigitalOcean.
Bridge Design Pattern in Java

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Today we will look into Bridge Design Pattern in java. When we have interface hierarchies in both interfaces as well as implementations, then bridge design pattern is used to decouple the interfaces from implementation and hiding the implementation details from the client programs.

Bridge Design Pattern

Just like Adapter pattern, bridge design pattern is one of the Structural design pattern. According to GoF bridge design pattern is:

Decouple an abstraction from its implementation so that the two can vary independently

The implementation of bridge design pattern follows the notion to prefer Composition over inheritance.

Bridge Design Pattern in Java Example

If we look into bridge design pattern with example, it will be easy to understand. Lets say we have an interface hierarchy in both interfaces and implementations like below image. Bridge Design Pattern Interface Hierarchy Now we will use bridge design pattern to decouple the interfaces from implementation. UML diagram for the classes and interfaces after applying bridge pattern will look like below image. bridge design pattern, bridge pattern uml, bridge pattern example Notice the bridge between Shape and Color interfaces and use of composition in implementing the bridge pattern. Here is the java code for Shape and 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 {
	//Composition - implementor
	protected Color color;
	
	//constructor with implementor as input argument
	public Shape(Color c){
		this.color=c;
	}
	
	abstract public void applyColor();
}

We have Triangle and Pentagon implementation classes as below. 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();
	} 

}

Here are the implementation classes for RedColor and 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.");
	}
}

Lets test our bridge pattern implementation with a test program. 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();
	}

}

Output of above bridge pattern example program is:

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

Bridge design pattern can be used when both abstraction and implementation can have different hierarchies independently and we want to hide the implementation from the client application.


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Pankaj

author

Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?

Keeping applyColor() in both Color interface and Shape abstract class create confusion, both are different method keeping different name would have been good to avoid confusion,

- Sach

    Do we have any reference in JAVA JDK/API where Bridge pattern.is used ?

    - Sumeet Aggarwal

      code is not displayed properly. go to html view of your browser to see the code nevertheless KG

      - lukas

        If I understood this article correct, first schema addresses the state before, and UML diagram addresses the state after applying Bridge pattern. If that’s what you meant to show, I guess that schema is not correct. Arrows from RedColor and GreenColor towards Triangle and Pentagon, should be pointing vice-versa.

        - Rasa

          Hi Pankaj, Thanks for the explanation. I am not fully clear on the example. In the example we could create the color instances and pass it to the shapes. Then why can not we call the apply color directly on the color objects themselves? Why we are going thru the shape objects? Thanks in advance,

          - Anupama

            Great article, I read 2 prior articles which described this pattern, but in no way demonstrated why you would ever have a need to use it. This article does both, and very simply.

            - Paul

              Please modify UML diagram, you draw association and describing it as composition.

              - Anurag

                Please, change builder to bridge in the first line of the article

                - 12

                  Thanks Pankaj for the wonderful article on Design patterns, but you may want to correct the first line on this “Bridge pattern” page: "When we have interface hierarchies in both interfaces as well as implementations, then builder design " It is supposed to be bridge pattern and not builder.

                  - Jay

                    Cool explanation as always. Which tool are you using for UML diagram.?

                    - Anil