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

跟我一起学“仓颉”设计模式-桥接模式

一、桥接模式

桥接模式:将抽象部分与它的实现部分解耦,使得二者都可以独立变化(结构型)。

桥接模式的角色:

  • 抽象类:用于定义抽象类的接口,其中定义了实现类接口类型的对象,并可以维护该对象;
  • 扩充抽象类:是一个具体类,用于实现在抽象类声明的抽象业务方法;
  • 实现类接口:定义实现类的接口;
  • 具体实现类:实现了实现类接口,在它里面提供了业务方法的不同实现。

二、实现

在src目录下,新建一个bridge文件夹,在该文件夹下新建一个bridge.cj文件和bridge.drawio文件。

类图

核心代码

package DesignPattern.birdge // 实现类接口 public interface Color { func doPaint(): Unit } // 具体实现类 public class Pink <: Color { public func doPaint() { println("粉色") } } public class Blue <: Color { public func doPaint() { println("蓝色") } } // 抽象类 public abstract class Pen { var optColor: Option<Color> = Option<Color>.None public func setColor(color: Color) { this.optColor = color } public func doDraw():Unit } // 具体抽象类 public class BigPen <: Pen { public func doDraw() { match (this.optColor) { case Some(color) => print("大笔的颜色是: ") color.doPaint() case None => println("绘图异常") } } } public class SmallPen <: Pen { public func doDraw() { match (this.optColor) { case Some(color) => print("小笔的颜色是: ") color.doPaint() case None => println("绘图异常") } } }

测试代码

package DesignPattern import DesignPattern.birdge.* main(): Int64 { var pen:Pen = BigPen() pen.setColor(Pink()) pen.doDraw() pen = SmallPen() pen.setColor(Blue()) pen.doDraw() return 0 }

三、优缺点

优点:

  • 分离了抽象接口和实现的部分;
  • 桥接模式取代了多层继承方案,极大的减少了子类的个数;
  • 桥接模式提高了系统的可扩展性,在两个维度的变化中任意扩展其中一个维度都不需要修改原有的系统,符合开闭原则。

缺点:

  • 桥接模式会增加系统的设计难度,让系统理解难度增加;
  • 需要正确识别出系统中两个独立变化的维度。

四、适用环境

  • 如果系统需要在抽象化和具体化之间增加更多灵活性,避免多层继承,可以选择桥接模式;
  • 抽象部分和具体部分可以独立扩展,互不影响。

五、小结

本章为大家详细的介绍了仓颉设计模式中桥接模式的内容,下一章,为大家带来桥接模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

http://www.rkmt.cn/news/1490909.html

相关文章:

  • Horizon Agent在RDS服务器上的安装与应用程序池发布指南(2111.1版本)
  • 【江门六大黄金回收门店横向评测 附避坑指南】 - 润富黄金回收
  • MyBatis-Plus 多租户实战
  • 网盘直链下载助手:打破下载限制的九大网盘通用解决方案
  • 告别Altera EPM240T100C5N?手把手教你用AG256SL100实现国产CPLD平替(附引脚兼容对照表)
  • 如何扩展yoRadio存储:SD卡音乐播放功能实现指南
  • 第【11】期--基于智能反射面的MIMO安全速率最大化研究-maltab完整代码+完整报告
  • 【Springboot毕设全套源码+文档】基于Java的温泉旅游服务管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 生存模型拟合优度:从删失数据到临床可信预测的三层验证
  • MobileNet v3 + LR-ASPP 道路分割模型训练成果:含权重、代码与完整训练流程
  • Guns框架终极指南:如何用Spring Boot + Vue3快速构建企业级管理系统
  • 从‘单打独斗’到‘团队协作’:新手如何理解CESM中的耦合器CIME与模块运行模式?
  • 跟我一起学“仓颉”设计模式-桥接模式练习题
  • 从‘工业测量’到‘音频采集’:一颗ADS1274如何通吃?聊聊它的硬件设计‘跨界’玩法
  • 别再为VC++和LabVIEW报错头疼了!手把手搞定USB-CAN分析仪软件安装(附避坑指南)
  • MacOS系统下Charles破解实战:详细图文教程 [特殊字符]
  • LearnVIORB架构解析:从单目到双目,视觉惯性SLAM系统的终极实现
  • Win10/Win11系统下,用VS Code写LaTeX论文:MiKTeX安装、中文支持与PDF预览避坑全记录
  • MLOps实操入门:5个文件夹+3条命令构建本地可复现闭环
  • RAG、Agent、LLMwiki,一文讲透知识库5代架构演进
  • 51单片机+Proteus超声波测距保姆级教程:从驱动编写到LCD1602显示,附完整工程文件
  • 【Springboot毕设全套源码+文档】基于java的养生药膳食疗系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • EgoVLA——根据第一视角的人类视频中训练的VLA模型:助力家具组装等人形灵巧操作任务的攻克(利用可穿戴手部追踪)
  • 终极指南:用antimicrox让所有游戏都支持手柄控制的完整教程
  • Horos医疗影像软件完全指南:如何在Mac上免费实现专业级医学图像分析
  • BuildingBlocks适配器模式应用指南:掌握RecyclerView与ViewPager高级用法
  • PARL框架:AI Agent的分布式事件驱动执行范式
  • 2026年商用鸳鸯火锅底料现场试料品牌实测排行:九宫格火锅底料/川味火锅底料/清汤火锅底料/清油火锅底料/番茄底料/选择指南 - 优质品牌商家
  • 你的STM32项目复位不可靠?可能是忽略了这3个电容的细节(附选型指南)
  • 排查SNMP Trap收不到?手把手教你用Wireshark和MIB Browser定位问题(附端口占用解决)