JAVA设计模式9:桥接模式,将抽象部分与实现部分分离

简介: JAVA设计模式9:桥接模式,将抽象部分与实现部分分离


一、什么是桥接模式

桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,桥接模式通过将继承关系转换为关联关系,来实现解耦和灵活性。

在桥接模式中,抽象部分由一个抽象类或接口表示,实现部分由一个或多个具体类表示,桥接模式的关键是通过抽象类中包含一个指向实现类的引用,从而将抽象部分和实现部分分离。

桥接模式的核心思想是将抽象和实现分离,使得它们可以独立地变化,这种设计模式非常适用于以下 3 33 种情况。

  1. 当一个类存在两个或多个独立变化的维度时,使用桥接模式可以将它们解耦,使每个维度的变化都可以独立进行。
  2. 当需要在抽象部分和实现部分之间建立一种稳定的关联关系,并且需要避免在每个维度的变化中产生大量的子类时,可以使用桥接模式。
  3. 当一个类需要在多个平台或系统上进行扩展时,使用桥接模式可以使得扩展部分独立于抽象部分。

桥接模式通过将抽象和实现分离,提供了更加灵活和可扩展的设计解决方案,使得系统的结构更加清晰,并且减少了类之间的耦合性。


二、桥接模式实例

下面是一个简单的 Java 代码示例,演示了桥接模式的实现。

首先,我们定义一个抽象类 Shape,表示形状

public abstract class Shape {
    protected Color color;
    public Shape(Color color) {
        this.color = color;
    }
    public abstract void draw();
}

然后,我们定义一个实现类 Circle,表示圆形

public class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }
    @Override
    public void draw() {
        System.out.println("Draw a circle in " + color.getColor());
    }
}

接着,我们定义一个实现类 Rectangle,表示矩形

public class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }
    @Override
    public void draw() {
        System.out.println("Draw a rectangle in " + color.getColor());
    }
}

接下来,我们定义一个抽象类 Color,表示颜色

public abstract class Color {
    public abstract String getColor();
}

然后,我们定义一个实现类 RedColor,表示红色

public class RedColor extends Color {
    @Override
    public String getColor() {
        return "red";
    }
}

最后,我们可以创建对象并使用桥接模式进行调用。

public class BridgePatternDemo {
    public static void main(String[] args) {
        Color red = new RedColor();
        Shape circle = new Circle(red);
        circle.draw();
        Color green = new GreenColor();
        Shape rectangle = new Rectangle(green);
        rectangle.draw();
    }
}

运行上述代码,输出结果为:

Draw a circle in red
Draw a rectangle in green

通过桥接模式将形状 Shape 和颜色 Color 两个维度进行分离,可以独立地对它们进行扩展和变化,而不需要修改原有的代码。


三、桥接模式的应用场景

桥接模式在以下 4 44 类情况下适用,请同学们认真学习。

  1. 当你希望抽象和具体实现可以独立扩展时,使用桥接模式。桥接模式可以将抽象和实现部分分离,使它们可以独立变化,而不会相互影响。
  2. 当一个类存在多个独立变化的维度时,使用桥接模式。桥接模式可以将不同维度的变化分离为不同的类层次结构,使每个维度的变化都可以独立进行。
  3. 当希望在抽象部分和实现部分之间建立稳定的关联关系,并且避免在每个维度的变化中产生大量的子类时,使用桥接模式。桥接模式可以将抽象部分和实现部分分离,使得它们可以独立变化,而不会导致类爆炸问题。
  4. 当需要在多个平台或系统上进行扩展时,使用桥接模式。桥接模式可以使得扩展部分独立于抽象部分,可以方便地在不同的平台或系统上进行修改和扩展。

以下是 4 44 个桥接模式常见的应用场景,请同学们认真学习。

  • 图形界面中的窗口和操作系统的适配器之间的关系就可以使用桥接模式来实现。窗口可以作为抽象部分,而不同操作系统的适配器可以作为实现部分。
  • 对于不同类型的数据存储,比如关系型数据库和非关系型数据库,可以使用桥接模式来抽象出通用的数据访问层接口,然后基于不同的数据库类型实现具体的数据访问类。
  • 在游戏开发中,可以使用桥接模式来处理游戏角色的不同属性,角色可以作为抽象部分,而属性可以作为实现部分,通过桥接模式可以灵活地增加或修改角色的属性。
  • 在电子设备的遥控器中,可以使用桥接模式将遥控器的功能和不同的电子设备分离开来,使得遥控器可以适用于不同的电子设备。

桥接模式可以用于任何需要将抽象和实现分离,并且使它们可以独立变化的场景。它提供了一种灵活和可扩展的设计解决方案,可以减少类之间的耦合性,并且方便地进行功能扩展和修改。


四、桥接模式面试题

  1. 什么是桥接模式?你能解释一下吗?
  2. 桥接模式和其他设计模式有什么区别?
  3. 桥接模式的优点是什么?
  4. 桥接模式的缺点是什么?
  5. 你能给一个实际的例子来说明桥接模式的应用吗?
  6. 桥接模式和适配器模式有什么区别?
  7. 何时应该使用桥接模式?
  8. 桥接模式和组合模式有什么区别?
  9. 桥接模式是否会增加代码的复杂性?
  10. 桥接模式是否符合单一职责原则和开闭原则?
相关文章
|
4月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
90 0
|
4月前
|
关系型数据库 Java MySQL
【设计模式】【结构型模式】桥接模式(Bridge)
一、入门 什么是桥接模式? 桥接模式(Bridge Pattern)是一种结构型设计模式,核心思想是将抽象与实现分离,让它们可以独立变化。简单来说,它像一座“桥”连接了两个维度的变化,避免用继承导致代
257 10
|
6月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
8月前
|
设计模式 前端开发 数据库
「全网最细 + 实战源码案例」设计模式——桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化,从而降低代码耦合度,避免类爆炸,提高可扩展性。其结构包括实现类接口、具体实现类、抽象类和精确抽象类。适用于多维度扩展类、隐藏实现细节、简化庞杂类以及运行时切换实现方法的场景。优点包括高扩展性、隐藏实现细节、遵循开闭原则和单一职责原则;缺点是可能增加代码复杂度。示例中展示了不同操作系统播放不同格式视频文件的实现。
153 19
|
7月前
|
前端开发 JavaScript Java
Java打包jar运行时分离lib和jar
在`pom.xml`的`build`节点中,设置`packaging`为`jar`,并配置插件分离依赖库到`lib`目录和资源文件到`resources`目录。这样可以在运行时通过`-Dloader.path=lib,resources`加载外部依赖和资源文件,便于独立升级依赖库和修改资源文件,而无需重新打包程序。具体插件包括`maven-dependency-plugin`、`maven-resources-plugin`和`spring-boot-maven-plugin`等。
317 1
|
10月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
152 6
|
10月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
130 4
|
10月前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
346 2
|
11月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
11月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)