当前位置: 首页 > news >正文

4.桥接模式

概况

桥接模式:将抽象部分与实现部分分离,使它们可以独立变化,通过组合而非继承的方式实现解耦。


业务场景

场景描述:开发一个跨平台的图形绘制系统,支持不同形状(如圆形、矩形)和不同渲染方式(如矢量渲染、栅格渲染)。

  • 抽象部分:形状(如圆形、矩形)。

  • 实现部分:渲染方式(如矢量渲染、栅格渲染)。

代码示例

// 实现部分接口
interface Renderer {
    void renderShape(String shape);
}

// 具体实现:矢量渲染
class VectorRenderer implements Renderer {
    @Override
    public void renderShape(String shape) {
        System.out.println("绘制 " + shape + " 使用矢量渲染");
    }
}

// 具体实现:栅格渲染
class RasterRenderer implements Renderer {
    @Override
    public void renderShape(String shape) {
        System.out.println("绘制 " + shape + " 使用栅格渲染");
    }
}

// 抽象部分:形状
abstract class Shape {
    protected Renderer renderer;

    public Shape(Renderer renderer) {
        this.renderer = renderer;
    }

    public abstract void draw();
}

// 具体抽象:圆形
class Circle extends Shape {
    public Circle(Renderer renderer) {
        super(renderer);
    }

    @Override
    public void draw() {
        renderer.renderShape("圆形");
    }
}

// 具体抽象:矩形
class Rectangle extends Shape {
    public Rectangle(Renderer renderer) {
        super(renderer);
    }

    @Override
    public void draw() {
        renderer.renderShape("矩形");
    }
}

// 客户端代码
public class BridgePatternDemo {
    public static void main(String[] args) {
        Renderer vectorRenderer = new VectorRenderer();
        Renderer rasterRenderer = new RasterRenderer();

        Shape circle = new Circle(vectorRenderer);
        circle.draw(); // 绘制 圆形 使用矢量渲染

        Shape rectangle = new Rectangle(rasterRenderer);
        rectangle.draw(); // 绘制 矩形 使用栅格渲染
    }
}

总结

  1. 核心思想:通过组合将抽象部分(如形状)与实现部分(如渲染方式)分离,使它们可以独立变化。

  2. 优点

    • 解耦抽象和实现,增强系统扩展性。

    • 符合开闭原则,新增抽象或实现时无需修改现有代码。

  3. 适用场景

    • 需要多维度扩展的系统(如多平台、多渲染方式)。

    • 避免类爆炸问题(如形状和渲染方式的组合)。

  4. 业务场景

    • 跨平台 UI 开发(如不同操作系统下的按钮和窗口)。

    • 数据库驱动设计(如不同数据库类型的连接和操作)。

    • 消息通知系统(如不同消息类型和发送渠道的组合)。

相关文章:

  • 逻辑回归机器学习
  • Java零基础入门笔记:多线程
  • 元脑服务器:浪潮信息引领AI基础设施的创新与发展
  • NVIDIA显卡30年:从加密矿潮到AI霸权
  • 1个基于 Three.js 的 Vue3 组件库
  • JavaScript 是什么?
  • yolov5训练自己数据集的全流程+踩过的坑
  • Mysql5.7-yum安装和更改mysql数据存放路径-2020年记录
  • JVM常见面试题
  • 跨越时空的对话:图灵与GPT-4聊AI的前世今生
  • nats jetstream server code 分析
  • 【2025年26期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股涨停股池数据获取实例演示及接口API说明文档
  • Prompt engineering设计原则
  • 【芯片验证】verificationguide上的74道SystemVerilog面试题
  • Phi-4-multimodal:图、文、音频统一的多模态大模型架构、训练方法、数据细节
  • 向死而生:在心灵废墟上重建生命圣殿——论自我蜕变的五重维度
  • Linux网络之数据链路层协议
  • 蓝桥杯备考:图论初解
  • 如何避免依赖关键人员导致“单点故障”
  • 基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装
  • 曲阜网站建设/搜索引擎优化效果
  • 企业建设电商网站/建站平台如何隐藏技术支持
  • 网站的站内结构锚文本是如何做的/软件开发外包公司
  • 域名可以同时做邮箱和网站么/百度一下你就知道官网首页
  • 自己做网站制作教程/百度指数分析官网
  • 哈尔滨市建设网/深圳优化公司哪家好