今天,我们将探讨Java中的Bridge设计模式。当我们在接口和实现中都有接口层次结构时,则使用桥设计模式 来将接口与实现解耦,并对客户端程序隐藏实现细节。
桥接设计模式
就像Adapter pattern一样,桥设计模式也是结构化设计模式 的一种。根据GoF的桥梁设计模式是:
将抽象与其实现分离,以便两者可以独立变化
桥接设计模式的实现遵循Composition的概念,而不是inheritance。
Java中的Bridge设计模式示例
如果我们用例子来研究桥梁设计模式,它将很容易理解。假设我们在接口和实现中都有一个接口层次结构,如下图所示。现在我们将使用桥设计模式将接口与实现解耦。应用桥接模式后的类和接口的UML图将如下图所示。
注意
Shape
和Color
接口之间的桥梁,以及在实现桥接模式时使用的组合。下面是Shape和Color接口的Java代码。Color.java
1package com.journaldev.design.bridge;
2
3public interface Color {
4
5 public void applyColor();
6}
‘Shape.java’,你知道的。
1package com.journaldev.design.bridge;
2
3public abstract class Shape {
4 //Composition - implementor
5 protected Color color;
6
7 //constructor with implementor as input argument
8 public Shape(Color c){
9 this.color=c;
10 }
11
12 abstract public void applyColor();
13}
我们有三角形和五角大楼实现类,如下所示。Triangle.java
1package com.journaldev.design.bridge;
2
3public class Triangle extends Shape{
4
5 public Triangle(Color c) {
6 super(c);
7 }
8
9 @Override
10 public void applyColor() {
11 System.out.print("Triangle filled with color ");
12 color.applyColor();
13 }
14
15}
‘i五角星.java’。
1package com.journaldev.design.bridge;
2
3public class Pentagon extends Shape{
4
5 public Pentagon(Color c) {
6 super(c);
7 }
8
9 @Override
10 public void applyColor() {
11 System.out.print("Pentagon filled with color ");
12 color.applyColor();
13 }
14
15}
下面是RedColor和GreenColor的实现类。RedColor.java
1package com.journaldev.design.bridge;
2
3public class RedColor implements Color{
4
5 public void applyColor(){
6 System.out.println("red.");
7 }
8}
‘GreenColor.java’,你知道的。
1package com.journaldev.design.bridge;
2
3public class GreenColor implements Color{
4
5 public void applyColor(){
6 System.out.println("green.");
7 }
8}
让我们用一个测试程序来测试我们的桥模式实现。BridgePatternTest.java
1package com.journaldev.design.test;
2
3import com.journaldev.design.bridge.GreenColor;
4import com.journaldev.design.bridge.Pentagon;
5import com.journaldev.design.bridge.RedColor;
6import com.journaldev.design.bridge.Shape;
7import com.journaldev.design.bridge.Triangle;
8
9public class BridgePatternTest {
10
11 public static void main(String[] args) {
12 Shape tri = new Triangle(new RedColor());
13 tri.applyColor();
14
15 Shape pent = new Pentagon(new GreenColor());
16 pent.applyColor();
17 }
18
19}
上述桥型示例程序的输出为:
1Triangle filled with color red.
2Pentagon filled with color green.
当抽象和实现都可以独立地具有不同的层次结构,并且我们希望对客户端应用程序隐藏实现时,可以使用桥设计模式。