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

Java 设计模式之桥接模式

文章目录

  • Java 设计模式之桥接模式
    • 概述
    • UML
    • 代码实现

Java 设计模式之桥接模式

概述

  • 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  • 通过桥接模式,可以避免类爆炸问题,并提高系统的可扩展性。

UML

在这里插入图片描述

核心思想:

  • 抽象部分:定义高层的控制逻辑。
  • 实现部分:定义底层的具体实现。
  • 桥接:通过组合的方式连接抽象部分和实现部分。

角色:

  • Implementor:实现部分的接口,定义行为。
  • ConcreteImplementor:具体实现部分类,实现行为。
  • Abstraction:抽象部分的抽象类,持有实现部分的引用。
  • RefinedAbstraction:具体抽象部分类,实现具体的抽象逻辑。

例如:图形绘制中的形状和颜色。

代码实现

假设我们需要绘制不同形状(如圆形、矩形)的图形,并且这些图形可以使用不同的颜色(如红色、绿色)。使用桥接模式可以将形状和颜色分离,使它们可以独立扩展。

定义部分实现的接口:

public interface Color {
    void applyColor();
}

定义具体的部分实现类:

public class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("使用红色");
    }
}
public class Green implements Color {
    @Override
    public void applyColor() {
        System.out.println("使用绿色");
    }
}

定义抽象实现的抽象类:

public abstract class Shape {
    protected Color color;

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

    public abstract void draw();
}

定义具体的抽象实现类:

public class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形");
        color.applyColor();
    }
}
public class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形");
        color.applyColor();
    }
}

使用:

public class Client {
    public static void main(String[] args) {
        Red red = new Red();
        Green green = new Green();
        Shape redCircle = new Circle(red);
        Shape greenCircle = new Circle(green);
        redCircle.draw();
        greenCircle.draw();
    }
}

输出:

绘制圆形
使用红色
绘制圆形
使用绿色
http://www.dtcms.com/a/16469.html

相关文章:

  • Django 项目自动化部署脚本全解析
  • 【Maven】多module项目优雅的实现pom依赖管理
  • 一文深入了解DeepSeek-R1:模型架构
  • 【Logistic Regression】机器学习中的基础分类模型
  • P1226 【模板】快速幂
  • 主动视觉可能就是你所需要的:在双臂机器人操作中探索主动视觉
  • C++ Primer 语句作用域
  • Promise的三种状态
  • 企业数据安全:切实有效的数据安全保障措施分享:
  • deep seek
  • OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点
  • JAVA学习-练习试用Java实现“结合Apache Nifi对大数据流进行自动化处理和筛查”
  • DeepSeek大模型响应速度优化策略
  • Spring Boot全局异常处理终极指南:从青铜到王者的实战演进
  • 47 AVL树的实现
  • 【C】初阶数据结构4 -- 双向循环链表
  • 深入 Java:从基础到实战的文件处理技巧
  • 知识图谱数据库 Neo4j in Docker笔记
  • 2025最新深度学习pytorch完整配置:conda/jupyter/vscode
  • 咸鱼换绑手机号能换ip属地吗?深入探讨
  • 深度学习-114-大语言模型应用之提示词指南实例DeepSeek使用手册(三)
  • 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题
  • Spring 框架数据库操作常见问题深度剖析与解决方案
  • 微服技术栈之Spring could gateway
  • 【后端面试总结】什么是堆,什么是栈
  • Open3D C++系列教程 (七)继承窗口类
  • 什么是 大语言模型中Kernel优化
  • 【第5章:深度生成模型— 5.1 变分自编码器(VAE)与生成对抗网络(GAN)的基础理论】
  • 【做一个微信小程序】校园地图页面实现
  • 代码随想录DAY31|56. 合并区间、738.单调递增的数字、968.监控二叉树