用微信微博网站来做睡眠经济网站建设伍首选金手指
2026/4/18 17:32:14 网站建设 项目流程
用微信微博网站来做睡眠经济,网站建设伍首选金手指,三门峡设计公司官网,v9双语版网站怎么做文章目录0.个人感悟1. 概念2. 适配场景(什么场景下使用)2.1 适合的场景2.2 常见场景举例3. 实现方法3.1 实现思路3.2 UML类图3.3 代码示例4. 优缺点4.1优点分析4.2缺点分析5. 源码分析#xff1a;JDBC中的桥接模式5.1 源码分析5.2 JDBC桥接模式的优势0.个人感悟 桥接模式JDBC中的桥接模式5.1 源码分析5.2 JDBC桥接模式的优势0.个人感悟桥接模式桥接作为一个桥梁连接系统的抽象化部分和实现化部分让它们解耦。解耦的好处多多包括可以独立演变等关键(痛点)是怎么理解和识别抽象部分和实现化部分。结合自己的经验提供参考:抽象化部分: 核心职责是定义要做什么业务流程、高层逻辑框架和策略对具体化部分是依赖关系实现化部分: 核心职责是定义具体怎么做提供共底层、平台相关的具体实现通常是系统中已有的组件实际工作中很少用到桥接模式。但是学习这个模式有利于感受软件设计中开闭(对修改关闭 对扩展开放)的魅力对于JDBC中桥接模式的理解网上有不同的观点。其实我觉得没必要争论谁对谁错不妨自己去看看源码有自己的判断软件设计没有绝对的正确和错误1. 概念英文定义(《设计模式可复用面向对象软件的基础》):Decouple an abstraction from its implementation so that the two can vary independently.中文翻译:将抽象部分与它的实现部分分离使它们都可以独立地变化。理解:核心思想: 使用组合代替继承将抽象层次与实现层次分离关键要点:分离关注点: 将复杂的系统分解为两个独立的维度抽象高层逻辑和实现底层细节独立演化: 抽象层次和实现层次可以各自独立地扩展互不影响避免类爆炸: 当系统有多个变化维度时避免创建大量子类运行时绑定: 抽象和实现之间的组合关系可以在运行时动态建立2. 适配场景(什么场景下使用)2.1 适合的场景多个维度变化: 当系统有两个或多个独立变化的维度且这些维度都可能扩展时避免继承层次过深: 当使用继承会导致类层次结构过于复杂产生类爆炸问题时运行时切换实现: 需要在运行时动态切换不同的实现时2.2 常见场景举例GUI框架: 窗口抽象与窗口实现具体平台Windows、Linux、Mac数据库驱动: JDBC。这个有很多解读后面会提供一种我比较认可的理解日志系统: 日志接口抽象与日志输出方式文件、控制台、网络支付系统: 支付接口抽象与具体支付方式支付宝、微信、银行卡绘图工具: 形状抽象与渲染引擎矢量、栅格3. 实现方法3.1 实现思路识别两个独立变化维度: 分析系统找出两个可以独立变化的维度定义实现化接口(Implementor): 创建实现部分的接口定义基本操作创建具体实现化类(ConcreteImplementor): 实现Implementor接口提供具体的底层实现定义抽象化类(Abstraction):创建抽象部分基类持有对Implementor的引用组合关系定义基于Implementor的高层操作创建扩展抽象化类(RefinedAbstraction): 继承Abstraction扩展或修改其行为客户端使用: 客户端创建具体实现化对象将其传递给抽象化对象使用3.2 UML类图角色说明:Abstraction (抽象化角色): 定义抽象接口维护对Implementor的引用RefinedAbstraction (扩展抽象化角色): 扩展抽象接口通常比Abstraction更具体Implementor (实现化角色): 定义实现类的接口提供基本操作ConcreteImplementor (具体实现化角色): 实现Implementor接口提供具体实现3.3 代码示例背景以遥控器和TV为例传统方式设计层次是遥控器接口-遥控器实现(初级遥控器 高级遥控器)- 厂商遥控器(遥控器类型x厂商组合)这样进行扩展的话会有M种电视 x N种遥控器的组合导致类爆炸也不利于复用使用桥接模式可以解决上面的问题实现化部分的接口和实现publicinterfaceTV{/** * description 开机 * author bigHao * date 2026/1/6 **/voidon();/** * description 关机 * author bigHao * date 2026/1/6 **/voidoff();/** * param channel 频道 * description 换台 * author bigHao * date 2026/1/6 **/voidtuneChannel(intchannel);}publicclassSonyTVimplementsTV{Overridepublicvoidon(){System.out.println(索尼电视开启展示LOGO);}Overridepublicvoidoff(){System.out.println(索尼电视进入待机模式);}OverridepublicvoidtuneChannel(intchannel){System.out.println(索尼电视切换到频道channel);}}publicclassSamsungTVimplementsTV{Overridepublicvoidon(){System.out.println(三星电视快速启动);}Overridepublicvoidoff(){System.out.println(三星电视完全关闭);}OverridepublicvoidtuneChannel(intchannel){System.out.println(三星电视智能跳转到频道channel);}}抽象化角色和扩展抽象化角色abstractclassRemoteControl{protectedTVtv;publicRemoteControl(TVtv){this.tvtv;}/** * description 开机 * author bigHao * date 2026/1/6 **/publicabstractvoidturnOn();/** * description 关机 * author bigHao * date 2026/1/6 **/publicabstractvoidturnOff();}publicclassAdvanceRemoteControlextendsRemoteControl{publicAdvanceRemoteControl(TVtv){super(tv);}OverridepublicvoidturnOn(){tv.on();}OverridepublicvoidturnOff(){tv.off();}// 扩展功能/** * param channel 频道 * description 换台 * author bigHao * date 2026/1/6 **/publicvoidsetChannel(intchannel){System.out.print(高级遥控器指令);tv.tuneChannel(channel);// 依然调用具体实现}}客户端publicclassClient{staticvoidmain(){// 组合1高级遥控器控制索尼电视TVsonynewSonyTV();RemoteControlremote1newAdvanceRemoteControl(sony);remote1.turnOn();((AdvanceRemoteControl)remote1).setChannel(5);// 组合2高级遥控器控制三星电视抽象与实现可独立替换TVsamsungnewSamsungTV();RemoteControlremote2newAdvanceRemoteControl(samsung);remote2.turnOn();((AdvanceRemoteControl)remote2).setChannel(10);}}输出索尼电视开启展示LOGO 高级遥控器指令索尼电视切换到频道5 三星电视快速启动 高级遥控器指令三星电视智能跳转到频道104. 优缺点4.1优点分析高内聚低耦合: 抽象部分与实现部分完全分离可以独立变化复用性:抽象部分和实现部分可以分别复用组合使用可读性:系统分为清晰的抽象层和实现层易于理解维护性:改抽象或实现不影响另一方符合开闭原则稳定性:抽象层提供稳定接口实现层变化不影响客户端单一职责:抽象类负责高层逻辑实现类负责底层操作开闭原则:可以独立扩展抽象层次和实现层次合成复用原则:使用组合代替多层继承减少子类数量4.2缺点分析可读性:对初学者来说桥接模式的理解和使用有一定难度设计难度:需要识别两个维度设计难度增加5. 源码分析JDBC中的桥接模式5.1 源码分析对于JDBC中的桥接模式网上有很多不同的理解可以见我参考资料列表中文章跟踪代码分析后我比较认可这个观点:JDBC 的桥接模式是一中简化的桥接模式桥接模式的主要应用场景是某个类存在两个独立变化的维度且这两个维度都需要进行扩展而现在仅有 Driver 一个变化维度DriverManager 没有抽象化父类它本身也没有任何子类因此我认为在 JDBC 中是一种简化的桥接模式。代码:Class.forName(com.mysql.cj.jdbc.Driver);ConnectionconnDriverManager.getConnection(jdbc:mysql://host:port/database);跟踪代码后可以简化得到类图如下:5.2 JDBC桥接模式的优势真正的平台无关性应用程序与具体数据库解耦标准化接口统一了各种数据库的访问方式生态繁荣数据集支持只需要实现Driver接口允许数据库厂商自由竞争和创新降低学习成本开发者只需学习一套API长期兼容性JDBC标准稳定驱动可以不断优化。这也是面向接口编程的好处参考韩顺平 Java设计模式张维鹏 Java设计模式之结构型桥接模式java_my_life 《JAVA与模式》之桥梁模式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询