提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- [1. 桥梁模式介绍](#1. 桥梁模式介绍)
- [2. 桥梁模式角色](#2. 桥梁模式角色)
-
- [2.1 抽象化角色(Abstraction)](#2.1 抽象化角色(Abstraction))
- [2.2 扩展抽象化角色(Refined Abstraction)](#2.2 扩展抽象化角色(Refined Abstraction))
- [2.3 实现化角色(Implementor)](#2.3 实现化角色(Implementor))
- [2.4 具体实现化角色(Concrete Implementor)](#2.4 具体实现化角色(Concrete Implementor))
- [3. 桥梁模式使用场景](#3. 桥梁模式使用场景)
-
- [3.1 不希望或不适用使用继承的场景](#3.1 不希望或不适用使用继承的场景)
- [3.2 接口或抽象类不稳定的场景](#3.2 接口或抽象类不稳定的场景)
- [3.3 重用性要求较高的场景](#3.3 重用性要求较高的场景)
- [4. 桥梁模式优点](#4. 桥梁模式优点)
-
- [4.1 分离抽象接口及其实现部分](#4.1 分离抽象接口及其实现部分)
- [4.2 提高系统的可维护性](#4.2 提高系统的可维护性)
- [4.3 实现细节对客户透明](#4.3 实现细节对客户透明)
- [4.4 抽象类的实现可以在运行时刻进行配置](#4.4 抽象类的实现可以在运行时刻进行配置)
- [4.5 独立的对抽象化角色和实现化角色层次结构进行扩充](#4.5 独立的对抽象化角色和实现化角色层次结构进行扩充)
- [5. 桥梁模式代码示例](#5. 桥梁模式代码示例)
- [6. 总结](#6. 总结)

1. 桥梁模式介绍
桥梁(Bridge)设计模式是一个结构型 设计模式,主要目的是通过将抽象部分与它的实现部分分离,使它们都能独立地变化。
桥接设计模式用于将接口与实现分离,并向客户端程序隐藏实现细节。
桥梁设计模式通常涉及到一个抽象类 和它的一个实现类,这两者通过合作来完成具体的行为。这个实现类可能会有多个,它们都实现了抽象类的接口,但是提供了不同的实现方式。
桥梁模式通过将抽象和实现解耦,使得两者可以独立地变化,这种解耦使得系统更加灵活,能够适应更多的变化。它适用于那些需要频繁变更或扩展的系统,尤其是当系统的某个部分不稳定或者需要经常变化时,采用桥梁模式可以有效地提高系统的可维护性和可扩展性。
2. 桥梁模式角色

Java桥梁设计模式包含四个角色 ,通过这些角色的组合,桥梁模式允许在软件系统中将抽象部分 与实现部分分离
,提高了系统的可扩展性和可维护性。这种模式特别适用于那些需要频繁更换或增加新的具体实现的情况,如支付方式的切换、操作系统与具体应用的分离等场景。
2.1 抽象化角色(Abstraction)
定义抽象类的接口,并且维护一个指向实现化对象的引用。这个角色通常是一个抽象类,它定义了一个抽象接口,并通过一个引用指向具体的实现。
2.2 扩展抽象化角色(Refined Abstraction)
扩展抽象化角色,通常是抽象化角色的子类,实现抽象化角色中的业务方法。这个角色进一步实现了抽象角色中定义的接口,可能添加了一些新的方法或者对原有方法进行了扩展。
2.3 实现化角色(Implementor)
定义实现化角色的接口。这个接口不一定与抽象化角色的接口完全一致,事实上,这两个接口可以完全不同。实现化角色定义了一个接口,这个接口被抽象化角色所引用。
2.4 具体实现化角色(Concrete Implementor)
具体实现化角色实现了实现化角色接口,并完成具体的业务逻辑。这个角色提供了实现化角色的具体实现,这些实现可以被抽象化角色所引用,从而实现了一种灵活的、可扩展的设计模式。
3. 桥梁模式使用场景
3.1 不希望或不适用使用继承的场景
当系统需要扩展或变化时,如果直接使用继承可能会导致代码变得复杂且难以维护,这时可以采用桥梁模式将抽象和实现分离,使得新的抽象和实现可以独立地变化,而不影响其他部分。
3.2 接口或抽象类不稳定的场景
当系统的接口或抽象类经常需要变更时,使用桥梁模式可以将抽象和实现分离,使得抽象部分可以稳定不变,而实现部分可以根据需要灵活变更,从而提高了系统的可维护性和可扩展性。
3.3 重用性要求较高的场景
在需要高重用性的系统中,桥梁模式允许同一个实现类被多个抽象类共享,或者同一个抽象类被多个实现类共享,从而提高了代码的重用性和灵活性。
4. 桥梁模式优点
以下这些优点使得桥梁设计模式在Java开发中非常有用,特别是在需要高内聚和低耦合的系统设计中。
4.1 分离抽象接口及其实现部分
桥梁模式允许抽象和实现部分分离,使得抽象接口与实现部分可以独立变化,不会影响到对方,从而提高了系统的可扩展性。
4.2 提高系统的可维护性
由于抽象与实现的分离,系统可以更加容易地进行维护和升级。
4.3 实现细节对客户透明
客户端只与抽象接口进行交互,无需关心具体的实现细节,这有助于简化客户端代码,减少客户端与具体实现之间的耦合。
4.4 抽象类的实现可以在运行时刻进行配置
一个对象甚至可以在运行时刻改变它的实现,这种灵活性使得系统更加适应变化的环境和需求。
4.5 独立的对抽象化角色和实现化角色层次结构进行扩充
开发者可以独立的对抽象化角色和实现化角色层次结构进行扩充,这有助于应对系统的复杂变化。
5. 桥梁模式代码示例
如果我们通过示例来研究桥接设计模式,就会很容易理解。假设我们在接口和实现中都有一个接口层次结构,如下图所示。
现在我们将使用桥接设计模式将接口与实现分离。应用桥接模式后的类和接口的 UML 图将如下图所示。
请注意接口之间的桥梁Shape
以及Color在实现桥接模式时使用的组合。这是 Shape 和 Color 接口的 Java 代码。
Color.java
java
public interface Color {
public void applyColor();
}
Shape.java
java
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.java
java
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
java
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
java
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
GreenColor.java
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
让我们用测试程序测试我们的桥接模式实现。
BridgePatternTest.java
java
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();
}
}
上述桥接模式示例程序的输出为:
txt
Triangle filled with color red.
Pentagon filled with color green.
6. 总结
以上就是有关Java 桥梁模式的全部内容,通过对本文学习,我们清楚知道:Java中的桥梁(Bridge)设计模式是用于把抽象化
与实现化
解耦,使得二者可以独立变化。它通过创建一个作为桥梁的抽象类,将抽象接口与它的实现分离,从而可以独立地改变它们。
当抽象和实现可以独立地具有不同的层次结构
并且我们想要向客户端应用程序隐藏实现
时,可以使用桥梁设计模式
。
采用桥梁模式可以有效地提高系统的可维护性和可扩展性。