Java设计模式-桥梁模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • [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)设计模式是用于抽象化实现化解耦,使得二者可以独立变化。它通过创建一个作为桥梁的抽象类,将抽象接口与它的实现分离,从而可以独立地改变它们。

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

采用桥梁模式可以有效地提高系统的可维护性和可扩展性。‌

相关推荐
菜鸟小九2 分钟前
Leetcode20 (有效的括号)
java·数据结构·算法
悟能不能悟6 分钟前
讲一件Java虚拟线程
java·开发语言·oracle
fictionist9 分钟前
动态 Web 开发技术入门篇
java·服务器·开发语言·笔记·学习·mysql·spring
louisgeek10 分钟前
Java Date-Time
java
N_NAN_N44 分钟前
[蓝桥杯 2024 国 Python B] 设计
java·数据结构·算法·并查集
weixin_483745621 小时前
Springboot项目的目录结构
java·后端
Tirson Yang1 小时前
西安java面试总结1
java·面试
小猫咪怎么会有坏心思呢1 小时前
华为OD机试-猴子爬山-dp(JAVA 2025A卷)
java·算法·华为od
保持学习ing2 小时前
SpringBoot 前后台交互 -- CRUD
java·spring boot·后端·ssm·项目实战·页面放行
电子科技圈2 小时前
IAR开发平台升级Arm和RISC-V开发工具链,加速现代嵌入式系统开发
arm开发·嵌入式硬件·设计模式·性能优化·软件工程·代码规范·risc-v