首页 > 其他分享 >跟着GPT学设计模式之桥接模式

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

时间:2024-03-13 17:56:51浏览次数:20  
标签:桥接 实现 抽象 GPT 设计模式 部分 public color

说明

桥接模式,也叫作桥梁模式,英文是 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(备注技术)。

标签:桥接,实现,抽象,GPT,设计模式,部分,public,color
From: https://www.cnblogs.com/r0ad/p/18071207

相关文章

  • Prompt进阶3:LangGPT(构建高性能质量Prompt策略和技巧2)--稳定高质量文案生成器
    Prompt进阶3:LangGPT(构建高性能质量Prompt策略和技巧2)--稳定高质量文案生成器1.LangGPT介绍现有Prompt创建方法有如下缺点:缺乏系统性:大多是细碎的规则,技巧,严重依赖个人经验缺乏灵活性:对他人分享的优质prompt进行调整需要直接修改prompt内容缺乏交互友好性:优质promp......
  • 设计模式学习(一)单例模式的几种实现方式
    设计模式学习(一)单例模式的几种实现方式前言饿汉式懒汉式懒汉式DCLP局部静态式(Meyers'Singleton)单例模板参考文章前言单例模式,其核心目标是确保在程序运行的过程中,有且只有存在一个实例才能保证他们的逻辑正确性以及良好的效率。因此单例模式的实现思路就是确保一个......
  • 设计模式--单例模式
    单例模式的3种实现方式:饿汉式、懒汉式双重检查1.饿汉式(EagerInitialization)饿汉式单例模式在类加载时就创建实例,因此线程安全,但可能会增加程序启动时间和内存消耗。#include<iostream>classSingleton{public://获取单例对象的静态方法staticSingleto......
  • ChatGPT提问技巧——问题解答提示
    ChatGPT提问技巧——问题解答提示问题解答提示是一种允许模型生成回答特定问题或任务的文本的技术。要做到这一点,需要向模型提供一个问题或任务作为输入,以及与该问题或任务相关的任何附加信息。一些提示示例及其公式如下:示例1:回答事实性问题任务:回答一个事实性问题说......
  • ChatGPT提问技巧——总结提示
    ChatGPT提问技巧:总结提示摘要提示是一种允许模型生成给定文本的较短版本,同时保留其主要观点和信息的技术。具体做法是将较长的文本作为输入提供给模型,并要求它生成该文本的摘要。这项技术适用于文本摘要和信息压缩等任务。如何与ChatGPT一起使用:输入较长的文本,要求模......
  • <2024最新>ChatGPT逆向教程
    前言在使用本篇文章用到的项目以及工具时,需要对其有一定的了解,无法访问以及无法使用的问题作者不承担任何责任,可以自行想办法解决遇到的问题​。文章若有不合适,有问题的地方,请私聊指出,谢谢~准备工具一台至少2核2G内存的服务器,推荐是位于香港、新加坡或日本地区的服......
  • 设计模式 -- 1:简单工厂模式
    目录代码记录代码部分代码记录设计模式的代码注意要运用到面向对象的思想考虑到紧耦合和松耦合把具体的操作类分开不让其互相影响(注意这点)下面是UML类图代码部分#include<iostream>#include<memory>//引入智能指针的头文件usingnamespacestd;......
  • TDI(Task Deployment Interface)【chatgpt】
    TDI(TaskDeploymentInterface)驱动是一种用于任务调度和执行的框架,它提供了任务创建、启动、暂停、恢复以及取消等功能。TDI驱动主要用于管理和控制各种类型的任务,使开发人员可以更方便地管理任务的执行。使用TDI驱动,可以实现以下功能:任务创建和配置:通过TDI驱动,开发人员可以......
  • 揭秘Google Gemini:AI界的多模态革命者与ChatGPT-4的较量
    在人工智能的快速发展浪潮中,GoogleDeepMind的最新力作——Gemini,以其多模态的超凡能力,正引领着AI技术的新一轮革命。本文将深入探讨Gemini的核心特性、不同版本的特点,以及它与ChatGPT-4的对比优势和差异。一、Gemini简介AI的新纪元GoogleGemini,作为DeepMind的旗舰产......
  • Claude3、GPT-4 、Gemini、Sora:五大模型的技术特点与功能
    【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认......