桥接模式(结构型)

目录

一、前言

二、桥接模式

三、总结


一、前言

        桥接模式(Bridge Pattern)是一种常用的设计模式,它可以将抽象部分与它的实现部分分离,使它们可以独立地变化。桥接模式通常用于需要在多个维度上扩展一个类的情况,或者需要避免在抽象和实现之间存在固定的绑定关系的情况。

        桥接模式的核心思想是将抽象部分和实现部分分离出来,使它们可以独立地变化。在桥接模式中,抽象部分和实现部分通过一个桥接接口连接在一起,这个接口允许抽象部分和实现部分之间的交互。这种分离的好处在于,它可以使系统更加灵活和可扩展,因为抽象部分和实现部分可以独立地变化,而不会对客户端代码产生影响。

二、桥接模式

        比如我们有个需求制作服装,现在需要制作长袖,颜色有红色、绿色,这时候需要两个类,一个长袖红色、一个长袖绿色;后期有新需求,又要增加短袖制作,这时候就需要长袖红色、长袖绿色、短袖红色、短袖绿色;假设后期再增加一个颜色,就又需要增加两个类,如此下来,当种类和颜色等增加,增加的类就很多,如果利用桥接模式,就能减少类的增加。比如有类型:长袖、短袖;颜色:红色、绿色;尺码:L、M码,则根据桥接模式有类图:

        从类图可以看出,如果有新的增加,只需要再增加一个对应类即可。

        首先定义实现,提供基本操作的接口:

/**
* 颜色实现
*/
public interface ColorApi {void paint();
}
/**
* 尺码实现
*/
public interface SizeApi {void size();
}

        再定义具体实现:

public class GreenApi implements ColorApi{@Overridepublic void paint() {System.err.print("绿色->");}
}
public class RedApi implements ColorApi{@Overridepublic void paint() {System.err.print("红色->");}
}
public class LApi implements SizeApi{@Overridepublic void size() {System.err.println("L码");}
}
public class MApi implements SizeApi{@Overridepublic void size() {System.err.println("M码");}
}

        定义抽象类,包含对实现接口的引用:

public abstract class TypeApi {protected ColorApi colorApi;protected SizeApi sizeApi;public void setSpecification(ColorApi colorApi, SizeApi sizeApi){this.colorApi = colorApi;this.sizeApi = sizeApi;}public abstract void type();
}

        扩展抽象,抽象类的子类或具体实现类:

public class LongType extends TypeApi{@Overridepublic void type() {System.err.print("长袖->");colorApi.paint();sizeApi.size();}
}
public class ShortType extends TypeApi{@Overridepublic void type() {System.err.print("短袖->");colorApi.paint();sizeApi.size();}
}

        客户类:

public class BridgeClient {public static void main(String[] args) {TypeApi longType = new LongType();longType.setSpecification(new RedApi(), new LApi());longType.type();TypeApi shortType = new ShortType();shortType.setSpecification(new GreenApi(), new MApi());shortType.type();}
}

        运行结果:

三、总结

        其中几个关键角色定义:

  • 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
  • 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
  • 实现(Implementor):定义实现接口,提供基本操作的接口。
  • 具体实现(Concrete Implementor):实现实现接口的具体类。

        优点与缺点:

优点:

实现抽象和实现的分离
桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统
桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差,而且多继承结构中类的个数非常庞大,桥接模式是比多继承方案更好的解决方法
缺点:

桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

        使用场景:

1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

维基百科是非营利性机构 词条内容具有中立性、准确性、可靠性

维基百科对一些企业很有神秘性,自行操作很多次也没有成功建立维基百科,这一定是没有按照维基百科的规则和流程去操作。小马识途营销顾问提醒企业,维基百科是一种基于协作的在线百科全书,由维基媒体基金会运营。维基百科的创建流程…

Spark SQL编程

1. Spark SQL概述 1.1 什么是Spark SQL Spark SQL是用于结构化数据处理的Spark模块。与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些额外的信息来执行额外的优化。与Spa…

银行转账p图手机软件,实现回执单截图生成,用Swing或JavaFX实现

其实总体用了很少的代码,就是模版图框架代码实现,模版也是网上的,非常多总体实现的原理还是绘图功能,捕捉用户输入。 用户界面 (UI): 我们可以使用Swing或JavaFX来创建一个窗口界面,允许用户输入所需的信息。 数据处理…

大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明

大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。然而,现…

No208.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Moto edge s pro手机 WIFI和蓝牙连接不上 解决方法分享

2021年12月入手一台Moto Edge S Pro 12256版,看着性价比很高,越用越垃圾。屏幕显示没有vivo亮丽/APP图标很丑/屏幕上一点点水就失灵/拍照片边缘是模糊的/系统几乎不更新。 以上都可以忍受,但是: 用一年不到,蓝牙不能…

了解STM32看门狗定时器的工作原理和原则

STM32 系列微控制器的看门狗定时器 (Watchdog Timer,WWDG) 是一种重要的硬件资源,用于检测系统的异常状态,并在发生异常时执行特定的操作,以确保系统能够正常运行。在本文中,我将详细介绍 STM32 看门狗定时器的工作原理…

Camtasia 2024中文版功能介绍

在如今的数字时代,屏幕录制已成为许多工作或学习中不可或缺的一部分,无论是制作教学视频、演示软件功能,还是为了录制游戏过程,屏幕录制软件都扮演着至关重要的角色。实际上屏幕录制不仅仅可以单纯录制屏幕,还能玩出非…

Elastic stack8.10.4搭建、启用安全认证,启用https,TLS,SSL 安全配置详解

ELK大家应该很了解了,废话不多说开始部署 kafka在其中作为消息队列解耦和让logstash高可用 kafka和zk 的安装可以参考这篇文章 深入理解Kafka3.6.0的核心概念,搭建与使用-CSDN博客 第一步、官网下载安装包 需要 elasticsearch-8.10.4 logstash-8.…

科研学习|科研软件——有序多分类Logistic回归的SPSS教程!

一、问题与数据 研究者想调查人们对“本国税收过高”的赞同程度:Strongly Disagree——非常不同意,用“0”表示;Disagree——不同意,用“1”表示;Agree--同意,用“2”表示;Strongly Agree--非常…

使用PHP编写采集药品官方数据的程序

目录 一、引言 二、程序设计和实现 1、确定采集目标 2、使用PHP的cURL库进行数据采集 3、解析JSON数据 4、数据处理和存储 5、数据验证和清理 6、数据输出和可视化 7、数据分析和挖掘 三、注意事项 1、合法性原则 2、准确性原则 3、完整性原则 4、隐私保护原则 …

【vue】AntDV组件库中a-upload实现文件上传:

文章目录 一、文档&#xff1a;二、使用(以Jeecg为例)&#xff1a;【1】template&#xff1a;【2】script&#xff1a; 三、效果图&#xff1a; 一、文档&#xff1a; Upload 上传–Ant Design Vue 二、使用(以Jeecg为例)&#xff1a; 【1】template&#xff1a; <a-uploa…