Java中的桥梁设计模式

时间:2020-02-23 14:33:57  来源:igfitidea点击:

今天,我们将研究Java中的Bridge Design Pattern。
当我们在接口和实现中都具有接口层次结构时,则使用网桥设计模式将接口与实现分离,并在客户端程序中隐藏实现细节。

桥梁设计模式

就像适配器模式一样,桥梁设计模式也是结构设计模式之一。

根据GoF桥的设计模式是:

<p>Decouple an abstraction from its implementation so that the two can vary independently</p>

桥梁设计模式的实现遵循的概念是优先于继承而不是继承。

Java示例中的桥梁设计模式

如果我们以示例来研究桥梁设计模式,将很容易理解。
可以说我们在接口和实现中都有一个接口层次结构,如下图所示。

现在,我们将使用网桥设计模式将接口与实现分离。
应用桥接模式后,类和接口的UML图将如下图所示。

注意" Shape"和" Color"接口之间的桥梁,以及在实现桥梁模式时使用合成的方法。

这是Shape和Color接口的Java代码。

Color.java

package com.theitroad.design.bridge;

public interface Color {

	public void applyColor();
}

Shape.java

package com.theitroad.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();
}

我们有以下Triangle和Pentagon实现类。

Triangle.java

package com.theitroad.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();
	} 

}

五角大楼.java

package com.theitroad.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();
	} 

}

这是RedColor和GreenColor的实现类。

RedColor.java

package com.theitroad.design.bridge;

public class RedColor implements Color{

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

GreenColor.java

package com.theitroad.design.bridge;

public class GreenColor implements Color{

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

让我们用一个测试程序来测试我们的桥接模式实现。

BridgePatternTest.java

package com.theitroad.design.test;

import com.theitroad.design.bridge.GreenColor;
import com.theitroad.design.bridge.Pentagon;
import com.theitroad.design.bridge.RedColor;
import com.theitroad.design.bridge.Shape;
import com.theitroad.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();
	}

}

上面的桥接模式示例程序的输出为:

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

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