桥接模式birdge

news2025/2/24 14:13:02

简介

桥接模式:将抽象与实现相分离,使他们可以独立变化。

角色

抽象化(Abstraction)角色: 该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现,抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);
修正抽象(RefinedAbstraction)角色: Abstraction 的具体实现,对Abstraction 的方法进行完善和扩展;
实现化(Implementor)角色: 确定实现维度的基本操作,提供给 Abstraction使用。该类一般为接口或者抽象类;个人理解实现就是行为。
具体实现(ConcreteImplementor)角色: Implementor 的具体实现;

在这里插入图片描述

案例

现在将实现一个人的职业(抽象)和爱好(实现)的系统。

爱好的接口以及实现:

interface Hobby{
    void doSth();
}

class ReadBook implements Hobby{
    @Override
    public void doSth() {
        System.out.println("我喜欢看书");
    }
}

class BasketBall implements Hobby{
    @Override
    public void doSth() {
        System.out.println("我喜欢打篮球");
    }
}

职业的抽象类和实现:
抽象类中聚合了Hobby以供继承了抽象类的子类使用。


public abstract class People {
    Hobby hobby;//聚合

    public People(Hobby hobby) {
        this.hobby = hobby;
    }
    public abstract void doHobby();
}

class Scientist extends People{

    public Scientist(Hobby hobby) {
        super(hobby);
    }
    @Override
    public void doHobby() {
        super.hobby.doSth();
    }
}

class Teacher extends People{
    public Teacher(Hobby hobby) {
        super(hobby);
    }
    @Override
    public void doHobby() {
        super.hobby.doSth();
    }
}

这样,人的职业(抽象)与爱好(实现)完全解耦。扩展时仅需要改变客户端(main)中的new对象就能改变抽象/行为。

测试方法:

public static void main(String[] args) {
        Scientist scientist = new Scientist(new BasketBall());
        scientist.doHobby();
        Teacher teacher = new Teacher(new ReadBook());
        teacher.doHobby();
    }

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

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

相关文章

NOA标配搭载率不足3%!英伟达中国「自研」智驾方案

汽车行业的特殊性,意味着,对于供应链来说,一家独大几乎不可能。对于芯片赛道来说,同样如此。 以智能驾驶为例,目前的供应链形态,也正处于变革的关键周期。各路玩家也都在尝试与车企合作模式的多元化。 高工…

并发请求控制

Chrome 浏览器最多并发6个请求。一般情况下,我们都会设置并发数为 3。 并发请求控制主要有两种区别:假设并发数为 3 三个请求为一组进行并发,这三个请求全部完成了,再进行下一组。在第一种方式的基础上加上滑动补位,…

Express框架开发接口之前台分类导航

1.初始化 const handleDB require(../handleDB/index) // 获取全部导航 exports.allNav (req, res) > {(async function () {})() } // 更新或者添加导航 exports.upNav (req, res) > {(async function () {})() } // 根据id删除 exports.delNav (req, res) > {(a…

Mac电脑风扇控制推荐 Macs Fan Control Pro 中文 for mac

Macs Fan Control Pro是一款功能全面、易于使用且具有良好兼容性和安全性的风扇控制软件,适用于各种Mac用户。 除了能够调整风扇速度外,Macs Fan Control Pro还支持实时监测硬件传感器的温度,例如CPU、硬盘等,同时显示每个传感器…

SpringBoot系列之自定义Jackson对象映射器格式日期数据

开发环境 JDK 1.8SpringBoot2.2.1Maven 3.2Mysql5.7.36开发工具 IntelliJ IDEAsmartGit 背景 在我之前的博客中,有对Springboot2.0集成Mybatis Plus做了比较详细的描述,现在这篇博客介绍,基于开源的jackson api来自定义ObjectMapping&…

MPLAB X IDE 仿真打断点提示已中断的断点?

这种中间带裂缝的是无效断点。 原因可能与XC编译器的优化有关,最后生成的汇编与C语言并不是一一对应的(官方给的解释是效率高)。所以这一行C语言转换的汇编代码可能并不在这个位置,也可能与其它汇编合并后根本就没有 我的解决方法是把优化等级调到最低&a…

【多线程面试题二十二】、 说说你对读写锁的了解

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说说你对读写锁的了解 …

windows server 2016调优

1. 增加TCP连接的最大数量: 在您当前的注册表路径(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters)中的右侧窗格,右击空白处,选择“新建” -> “DWORD (32位) 值”。为新的值命名为TcpNu…

Python:PDF转长图像和分页图像

简介:随着电子化文档的普及,PDF文件的使用频率越来越高。有时我们需要将PDF中的内容转化为图片格式进行分享或编辑,那么如何才能轻松地完成此任务呢?本文将为你展示一个Python工具:如何将PDF文件转化为图片&#xff0c…

Macroscope安全漏洞检测工具简介

学习目标: 本介绍旨在帮助感兴趣者尽快了解 Macroscope,这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试: 如下图所示,如果使用多种互补工具(SAST/DAST/SCA 等)来检测应用程序…

redis的两种持久化的方式 RDB AOF

1. RDB持久化 就是将某个时间点的数据快照,全部保存在磁盘的二进制文件中。 可以选择命令手动触发: save命令,阻塞式保存快照数据,会阻塞其它操作 bgsave,开启子线程执行RDB 或者配置文件配置自动触发: 在r…

C#中只能在.NetFramework下使用LINQtoSQL不要在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点,因为我百般努力在.net7.0下无法实现LINQtoSQL的…

走近Python爬虫(二):常见反爬虫机制的应对措施

文章目录 一、应对—异步加载1.一般措施2.Selenium 二、应对—登录验证1.使用Selenium模拟登录2.使用Cookies登录3.使用Session模拟表单登录 三、应对—验证码 本文是Python爬虫系列博客的第二篇,内容概览如下: 一、应对—异步加载 1.一般措施 AJAX技术…

【操作系统】Cygwin和MinGW的区别与联系是怎样的?

Cygwin和MinGW的区别与联系是怎样的? CygwinMinGW两者的区别和联系参考资料 Cygwin和MinGW都是为Windows系统开发者设计的工具。 Cygwin Cygwin, 原Cygnus出品,目前是RedHat名下的项目。项目的目的是提供运行于Windows平台的类Unix环境&…

Linux - 浅析守护进程的概念

Linux下的守护进程是在后台运行的特殊进程,它不与任何终端关联,通常在系统启动时自动启动,运行在后台并且不受用户登录或注销的影响。Linux 下的守护进程通常是以系统管理员的权限运行,用来执行一些系统任务,例如监控硬…

MATLAB R2023b(编程和数学计算软件)

MATLAB R2023b是一款最新版本的编程和数学计算软件,它包含了大量用于算法开发、数据可视化、数据分析、数据模拟以及交互式环境的功能,使得用户能够更加方便灵活地进行科学研究或者工程应用。 MATLAB R2023b相较于之前的版本,增加了一些新的…

同城售后系统退款业务重构心得 | 京东云技术团队

一、重构背景 1.1、退款 到家、小时购、天选退款有2套结构,代码逻辑混乱; 其中小时购、天选部分售后单是和平生pop交互退款,部分是和售后中台交互退款;并且兼容3套逻辑; 痛点:代码繁重,缺乏…

猫头虎博主:Python数据分析,你掌握了吗?

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

自动驾驶的同学看过来:DriveLM:世界首个语言+自动驾驶全栈开源数据集

DriveLM:世界首个语言自动驾驶全栈开源数据集,旨在借助大语言模型和海量自然语言数据集,构筑复杂场景下安全、精准、可解释的自动驾驶系统,突破现有自动驾驶推理能力上限,数据集已开源! DriveLM提供了量化…

多叉树OJ思路 ,无代码

也是第一次写森林树,确实不是很拿捏,受二叉树的影响太多了;你会发现这个多叉树一般不建链式结构的,都是数组式的比如“双亲表示法”,让子节点可以找到父节点这样。 有疑问欢迎交流,作者我也是蒟蒻&#xff…