【Java 设计模式】结构型之桥接模式

news2024/11/19 0:46:50

文章目录

    • 1. 定义
    • 2. 应用场景
    • 3. 代码实现
    • 结语

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化,从而降低它们之间的耦合。桥接模式通过将抽象部分和实现部分分离,使得它们可以独立地变化,同时在它们之间建立一个桥梁。在本文中,我们将介绍 Java 中桥接模式的定义、结构、使用场景以及如何在实际开发中应用。

1. 定义

桥接模式是一种结构型设计模式,它通过将抽象部分和实现部分分离,使得它们可以独立地变化。桥接模式的核心思想是通过聚合而不是继承来连接不同的抽象和实现。

桥接模式通常包含四个主要角色:抽象类(Abstraction)、扩展抽象类(RefinedAbstraction)、实现接口(Implementor)和具体实现类(ConcreteImplementor)。

  • 抽象类(Abstraction): 定义抽象部分的接口,并包含一个指向实现接口的引用
  • 扩展抽象类(RefinedAbstraction): 对抽象类的扩展,通常用于添加额外的功能或修改抽象部分的行为
  • 实现接口(Implementor): 定义实现部分的接口,提供基本的操作
  • 具体实现类(ConcreteImplementor): 实现实现接口,提供具体的操作

2. 应用场景

桥接模式通常在以下场景中使用:

  1. 抽象和实现部分的变化独立:

    当抽象和实现部分的变化独立时,可以使用桥接模式。这样可以使得两者可以独立地扩展,而不会相互影响

  2. 一个类存在多个独立变化的维度:

    当一个类存在多个独立变化的维度时,可以使用桥接模式。例如,一个形状类可能在颜色和形状两个维度上都有变化

  3. 不希望使用继承:

    当不希望使用继承来实现抽象和实现之间的连接时,可以使用桥接模式。桥接模式通过聚合而不是继承来连接抽象和实现,降低了耦合度

3. 代码实现

下面通过一个简单的例子来演示桥接模式的实现。假设有一个形状(Shape)类和一个颜色(Color)接口,需要在这两者之间建立桥梁。

实现接口 - 颜色 Color

package com.cheney.demo;

interface Color {
    String applyColor();
}

具体实现类 - 红色 Red

package com.cheney.demo;

class Red implements Color {
    @Override
    public String applyColor() {
        return "红色";
    }
}

具体实现类 - 绿色 Green

package com.cheney.demo;

class Green implements Color {
    @Override
    public String applyColor() {
        return "绿色";
    }
}

抽象类 - 形状 Shape

package com.cheney.demo;

abstract class Shape {
    protected Color color;

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

    abstract String draw();
}

扩展抽象类 - 圆形 Circle

package com.cheney.demo;

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

    @Override
    String draw() {
        return "画一个圆,使用颜色是:" + color.applyColor();
    }
}

扩展抽象类 - 方形 Square

package com.cheney.demo;

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

    @Override
    String draw() {
        return "画一个方形,使用颜色是:" + color.applyColor();
    }
}

客户端启动类 Main

package com.cheney.demo;

public class Main {
    public static void main(String[] args) {
        // 创建颜色实现类
        Color red = new Red();
        Color green = new Green();

        // 创建形状并指定颜色
        Shape redCircle = new Circle(red);
        Shape greenSquare = new Square(green);

        // 绘制形状
        System.out.println(redCircle.draw());
        System.out.println(greenSquare.draw());
    }
}

执行结果:

在这里插入图片描述

在上述例子中,Color 是实现接口,定义了应用颜色的操作。RedGreen 是具体实现类,分别表示红色和绿色。

Shape 是抽象类,包含一个指向颜色实现接口的引用,并定义了绘制形状的抽象方法。CircleSquare 是扩展抽象类,分别表示圆形和方形,通过构造方法指定颜色。

在客户端中,我们创建了红色和绿色的实现类,并使用它们来创建圆形和方形。通过桥接模式,我们将形状和颜色分离,使得它们可以独立变化。这样,我们可以轻松地添加新的颜色或形状而不影响原有的类结构。

结语

桥接模式是一种强大的设计模式,通过将抽象和实现分离,使得它们可以独立变化。在实际开发中,桥接模式常被用于处理多维度变化的场景,例如在图形界面中处理不同外观和主题的变化。通过合理使用桥接模式,可以使系统更加灵活、可扩展,并且更容易维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1395540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于arcgis js api 4.x开发点聚合效果

一、代码 <html> <head><meta charset"utf-8" /><meta name"viewport"content"initial-scale1,maximum-scale1,user-scalableno" /><title>Build a custom layer view using deck.gl | Sample | ArcGIS API fo…

Spring Boot自动配置原理

1.SpringBootApplication注解 springboot是基于spring的新型的轻量级框架&#xff0c;最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看&#xff0c;如何实现传奇的自动配置 SpringBootApplication//标注在某个类上&#xff0c;表示这个类是SpringBo…

C++ Linux动态库的编译和调用

一、C动态库编译 采用g编译C动态库&#xff0c;命令如下&#xff1a; g -fPIC -shared -o 动态库名 cpp文件名1.1 关于fPIC选项 首先了解动态库的载入时重定位。 一般linux的可执行文件都是elf格式&#xff08;一种二进制文件格式&#xff09;&#xff0c;在可执行文件的头部包…

分享 GitHub 上的敏感词汇工具类:sensitive-word

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

快慢指针-Floyd判圈算法

对于环形链表是否存在环的做法&#xff0c;普通算法可以通过额外Hash数组来存储链表元素&#xff0c;直到Hash数组中出现重复元素。时间复杂度O(n)&#xff0c;空间复杂度O(n) Floyd判圈算法通过利用快慢指针的移动来实现&#xff0c;时间复杂度O&#xff08;n&#xff09;&am…

09 STM32 - PWM

9.1 PWM简介 脉冲宽度调制(Pulse Width Modulation,简称PWM)&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点&#xff0c;就是对脉冲宽度的控制。 9.2 PWM波原理 如下图所示&#xff0c;使用定时器定时&#xff0c;从0开始&#x…

Linux grep命令(grep指令)grep --help各选项介绍(待更)

文章目录 grep --help英文中文 使用示例-E, --extended-regexp&#xff1a;此选项表示模式为扩展正则表达式。-F, --fixed-strings&#xff1a;此选项表示模式被视为固定字符串而不是正则表达式。-G, --basic-regexp&#xff1a;此选项表示模式为基础正则表达式。这是默认的模式…

HFSS笔记/信号完整性分析(二)——软件仿真设置大全

文章目录 1、多核运算设置1.1 如何设置1.2 如何查看自己电脑的core呢&#xff1f;1.3 查看求解的频点 2、求解模式设置Driven Terminal vs Driven modal 3、Design settings4、自适应网格划分5、更改字体设置 仅做笔记整理与分享。 1、多核运算设置 多核运算只对扫频才有效果&…

如何用GPT进行数据处理?

详情点击链接&#xff1a;如何用GPT进行数据处理&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定制自己…

HarmonyOS NEXT鸿蒙星河版发布

1月18日,在深圳举行的“鸿蒙生态千帆启航仪式”上,华为常务董事、终端BG CEO余承东宣布HarmonyOS NEXT鸿蒙星河版面向开发者开放申请。鸿蒙星河版将实现原生精致、原生易用、原生流畅、原生安全、原生智能、原生互联6大极致原生体验。 并且,华为在 1 月 15 日开启了HarmonyO…

稳定币智能分析:未来加密领域策略的关键!

随着 DeFi 和代币化改变金融领域&#xff0c;稳定币成为传统金融系统与新兴区块链之间的关键桥梁。但要在新兴的加密经济中准确评估稳定币的影响&#xff0c;需要一种全新的分析工具。 Token Explorer 是一款强大的稳定币分析工具&#xff0c;它能够追踪关键稳定币指标&#x…

50道SQL练习题及答案与详细分析

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

抽象类(没有对象)之引用对象失败之谜

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 欢迎&#x1f64f;点赞&#x1f5e3;️评论&#x1f4e5;收藏&#x1f493;关注 &#x1f496;衷心的希…

从技术大会到面试舞台:程序猿的蜕变之旅!

在这个技术日新月异的时代&#xff0c;程序员们需要不断地学习和提升自己的技能。 参加技术大会&#xff0c;无疑是程序员们拓宽视野、提升技能的重要途径之一。然而&#xff0c;技术大会只是程序员成长的一部分&#xff0c;掌握面试技巧同样至关重要。只有将这两者完美结合&a…

2024年回炉计划之排序算法(一)

算法是计算机科学和信息技术中的重要领域&#xff0c;涉及到问题求解和数据处理的方法。要学习算法&#xff0c;你可能需要掌握以下一些基本知识&#xff1a; 基本数据结构&#xff1a; 了解和熟练使用各种数据结构&#xff0c;如数组、链表、栈、队列、树和图等。数据结构是算…

[一]ffmpeg音视频解码

[一]ffmpeg音视频解码 一.编译ffmpeg1.安装vmware虚拟机2.vmware虚拟机安装linux操作系统3.安装ftp和fshell软件4.在Ubuntu&#xff08;Linux&#xff09;中编译Android平台的FFmpeg&#xff08; arm和x86 &#xff09;5.解压FFmpeg6.Android编译脚本&#xff08;1&#xff09;…

军事智能中的深度强化学习不同于传统的深度强化学习

在军事智能中&#xff0c;“诡”和“诈”是两个最重要的概念。 “诡”变指的是智能体通过采取一些不可预测或复杂的变化策略来获得优势。诡变可能包括逃避对手的观察或引诱对手采取不利的行动。智能体可以使用诡变来欺骗对手&#xff0c;使其做出错误的决策或暴露其策略。 “诈…

C# WebApi传参及Postman调试

概述 欢迎来到本文&#xff0c;本篇文章将会探讨C# WebApi中传递参数的方法。在WebApi中&#xff0c;参数传递是一个非常重要的概念&#xff0c;因为它使得我们能够从客户端获取数据&#xff0c;并将数据传递到服务器端进行处理。WebApi是一种使用HTTP协议进行通信的RESTful服…

网络安全产品之认识WEB应用防火墙

随着B/S架构的广泛应用&#xff0c;Web应用的功能越来越丰富&#xff0c;蕴含着越来越有价值的信息&#xff0c;应用程序漏洞被恶意利用的可能性越来越大&#xff0c;因此成为了黑客主要的攻击目标。传统防火墙无法解析HTTP应用层的细节&#xff0c;对规则的过滤过于死板&#…

【面试合集】说说什么是进程?什么是线程?区别?

面试官&#xff1a;说说什么是进程&#xff1f;什么是线程&#xff1f;区别&#xff1f; 一、进程 操作系统中最核心的概念就是进程&#xff0c;进程是对正在运行中的程序的一个抽象&#xff0c;是系统进行资源分配和调度的基本单位 操作系统的其他所有内容都是围绕着进程展开…