跟着GPT学设计模式之桥接模式

这篇具有很好参考价值的文章主要介绍了跟着GPT学设计模式之桥接模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

桥接模式,也叫作桥梁模式,英文是 Bridge Design Pattern。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化。” 桥接模式通过将一个类的抽象部分与实现部分分离开来,使它们可以独立地进行扩展和修改。

在桥接模式中,有两个核心概念:

  • 抽象部分(Abstraction):定义抽象部分的接口,并维护一个对实现部分对象的引用。抽象部分将客户端的请求委派给实现部分进行处理。
  • 实现部分(Implementation):定义实现部分的接口,并提供具体实现。实现部分通常是通过接口或抽象类来定义,让不同的实现部分可以灵活替换。

通过桥接模式,抽象部分和实现部分可以独立地发展和演化,不会相互影响。这种解耦可以提高系统的灵活性和可扩展性。桥接模式常用于以下情况:

  • 当一个类拥有多个变化维度时,可以使用桥接模式将每个维度抽象出来,使得它们可以独立地变化。
  • 当需要在抽象部分和实现部分之间建立稳定的关联关系,又希望它们可以独立地进行扩展和修改时,可以使用桥接模式。

以下是桥接模式的结构示意图:

classDiagram class Abstraction { + implementor: Implementor + operation(): void } class RefinedAbstraction { + operation(): void } class Implementor { + operationImpl(): void } class ConcreteImplementorA { + operationImpl(): void } class ConcreteImplementorB { + operationImpl(): void } Abstraction <|-- RefinedAbstraction Abstraction o-- Implementor Implementor <|.. ConcreteImplementorA Implementor <|.. ConcreteImplementorB

Abstraction(抽象化角色)通过持有Implementor(实现化角色)的引用,将操作委托给Implementor来实现。RefinedAbstraction(扩充抽象化角色)继承自Abstraction,并可以在基础操作上添加额外的功能。Implementor(实现化角色)是一个接口或抽象类,定义了在Abstraction中使用的操作方法。ConcreteImplementorA和ConcreteImplementorB(具体实现化角色)实现了Implementor接口,并提供了具体的操作实现。

在桥接模式中,抽象部分通过聚合(或组合)实现部分的对象来实现功能。通过定义抽象部分和实现部分的接口,以及维护它们之间的关联关系,可以实现抽象部分与实现部分的解耦和独立变化。

应用场景

在Java开源项目中,桥接模式有许多应用场景。以下是其中几个示例:

  • JDBC(Java Database Connectivity):JDBC是Java中用于与数据库进行交互的API。它使用桥接模式将Java应用程序与不同数据库之间的连接进行解耦。JDBC提供了一个标准的接口,即抽象部分,而具体的数据库驱动程序实现则作为实现部分。这使得开发人员可以通过改变数据库驱动程序实现来与不同类型的数据库进行交互,而不需要修改应用程序的代码。
  • AWT(Abstract Window Toolkit)和Swing:AWT和Swing是Java的图形用户界面(GUI)工具包。它们使用桥接模式将组件的外观(如按钮、文本框)与底层操作系统的窗口系统分离开来。在AWT和Swing中,抽象部分是Java中的组件类,而实现部分是由底层平台提供的本地窗口系统。
  • 日志库:许多Java开源项目使用日志库进行日志记录。例如,Log4j和Logback是常见的日志库。它们使用桥接模式将应用程序的日志记录行为与底层的日志输出目标(如控制台、文件、数据库)解耦。抽象部分是由日志库提供的通用日志API,而实现部分是具体的日志输出目标。
  • 数据源连接池:连接池被广泛用于管理数据库连接的重用。在Java中,常见的开源连接池项目如HikariCP和Commons DBCP使用桥接模式来支持不同类型的数据库连接。它们提供了一个通用的连接池接口作为抽象部分,而具体的数据库驱动程序实现则作为实现部分。

这些示例说明了在Java开源项目中桥接模式的应用。通过桥接模式,可以将不同维度的变化解耦,在代码的可扩展性和灵活性方面提供支持。

编程示例

首先,定义抽象部分的接口或抽象类。这个接口或抽象类将定义高层操作或功能,并将包含一个对实现部分的引用。例如:

public interface Shape {
    void draw();
}

接下来,创建实现部分的接口或抽象类。这个接口或抽象类将定义实现部分的操作或功能。例如:

public interface Color {
    void fill();
}

然后,实现具体的实现部分类。这些类将实现实现部分的接口或抽象类。例如:

public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("Filling with red color");
    }
}
public class Blue implements Color {
    @Override
    public void fill() {
        System.out.println("Filling with blue color");
    }
}

在抽象部分的接口或抽象类中添加对实现部分的引用,并在其中定义具体的操作。例如:

public abstract class AbstractShape implements Shape {
    protected Color color;

    public AbstractShape(Color color) {
        this.color = color;
    }

    public abstract void draw();
}

最后,创建具体的抽象部分类。这些类将扩展抽象部分的接口或抽象类,并实现具体的操作。例如:

public class Circle extends AbstractShape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.print("Drawing a circle. ");
        color.fill();
    }
}
public class Rectangle extends AbstractShape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.print("Drawing a rectangle. ");
        color.fill();
    }
}

现在,可以使用桥接模式来创建抽象部分和实现部分之间的桥接:

// 创建实现部分的对象
Color red = new Red();
Color blue = new Blue();

// 创建抽象部分的对象并进行桥接
Shape redCircle = new Circle(red);
Shape blueRectangle = new Rectangle(blue);

// 调用抽象部分的方法,它会委派给实现部分的对象
redCircle.draw(); // Output: Drawing a circle. Filling with red color
blueRectangle.draw(); // Output: Drawing a rectangle. Filling with blue color

以上内容基于GPT创建和整理。

参考

  • 设计模式之美(作者王争,来自极客时间)

关于作者

来自一线全栈程序员nine的八年探索与实践,持续迭代中。欢迎关注“雨林寻北”或添加个人卫星codetrend(备注技术)。文章来源地址https://www.toymoban.com/news/detail-839416.html

到了这里,关于跟着GPT学设计模式之桥接模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式——桥接模式详解

    1.1⭐桥接模式的定义 维基百科: 桥接模式 是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。 百度百科: 桥接模式 是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,

    2024年02月06日
    浏览(37)
  • 设计模式 07 桥接模式

    桥接模式(Bridge Pattern)属于 结构型 模式 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为 柄体 (Handle and Body)模式或 接口 (Interface)模式。 比如需要创建电脑对象,市面上的电脑非常多, 品牌 有华为、苹果、联

    2024年02月11日
    浏览(38)
  • 设计模式——桥接模式

    引用 桥 我们大家都熟悉,顾名思义就是用来将河的两岸联系起来的。而此处的桥是用来将两个独立的结构联系起来,而这两个被联系起来的结构可以独立的变化,所有其他的理解只要建立在这个层面上就会比较容易。 基本介绍 桥接模式(Bridge)是指将实现与抽象放在两个不

    2024年02月12日
    浏览(37)
  • 设计模式-桥接模式

    适配器模式 类似,以后也会遇到意思接近一样的设计模式。在开发中一般多个模式混用,且根据不同的场景进行搭配,桥接模式也是 结构型模式 将抽象的部分和实现的部分分离,使它们都可以独立的变化。通俗来说,就是通过组合来 桥接 其它的 行为或维度 与适配器模式业

    2024年02月11日
    浏览(36)
  • 【设计模式】桥接模式

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结

    2024年02月13日
    浏览(47)
  • 设计模式之~桥接模式

    桥接模式:         将抽象部分与它的实现部分分离,使他们都可以独立地变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。         什么叫抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因

    2024年02月07日
    浏览(32)
  • 设计模式详解-桥接模式

    类型:结构型模式 实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。 意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 主要解决:类变化频繁时用继承可能会出现的类爆炸问题。 如何解决:减少类的耦合关系,让类独立变化。

    2024年02月12日
    浏览(37)
  • js设计模式:桥接模式

    可以将复杂的类进行一些拆分,让抽象和实现进行分离解耦,可以让每一个部分都可以单独维护 方便扩展和维护

    2024年02月22日
    浏览(28)
  • 设计模式-桥接模式(Bridge)

    桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分和实现部分分离,使它们可以独立地变化。这种分离允许你将一个类的功能层次结构(抽象)与另一个类的实现层次结构(实现)分开,从而在不同层次上进行修改和扩展。在本篇博客中,我们将详细介绍桥接

    2024年02月09日
    浏览(44)
  • 【前端设计模式】之桥接模式

    设计模式是在软件开发中经过验证的解决问题的方法。它们是从经验中总结出来的,可以帮助我们更好地组织和管理代码,提高代码的可维护性、可扩展性和可重用性。无论是前端还是后端开发,设计模式都扮演着重要的角色。在本专栏中,我们将探索一些常见的前端设计模

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包