Java 中的桥接设计模式

今天,我们将探讨Java中的Bridge设计模式。当我们在接口和实现中都有接口层次结构时,则使用桥设计模式 来将接口与实现解耦,并对客户端程序隐藏实现细节。

桥接设计模式

就像Adapter pattern一样,桥设计模式也是结构化设计模式 的一种。根据GoF的桥梁设计模式是:

将抽象与其实现分离,以便两者可以独立变化

桥接设计模式的实现遵循Composition的概念,而不是inheritance

Java中的Bridge设计模式示例

如果我们用例子来研究桥梁设计模式,它将很容易理解。假设我们在接口和实现中都有一个接口层次结构,如下图所示。Bridge Design Pattern Interface Hierarchy现在我们将使用桥设计模式将接口与实现解耦。应用桥接模式后的类和接口的UML图将如下图所示。bridge design pattern,bridge pattern uml,bridge pattern example注意ShapeColor接口之间的桥梁,以及在实现桥接模式时使用的组合。下面是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.

当抽象和实现都可以独立地具有不同的层次结构,并且我们希望对客户端应用程序隐藏实现时,可以使用桥设计模式。

Published At
Categories with 技术
comments powered by Disqus