当前位置: 首页 > 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.jsqmd.com/news/979183/

相关文章:

  • 告别裸机:在FreeRTOS上为STM32移植SOEM 1.4.0的完整指南
  • WaxPatch高级应用:实现复杂UI动态修改与业务逻辑热更新
  • 手把手教你配置锐捷AC的BFD链路:保障VAC高可用的关键一步
  • 肥胖数据分析实战:从BMI计算到腰围-种族交互效应的公共卫生建模
  • 【江门六大黄金回收门店横向评测 附避坑指南】 - 润富黄金回收
  • MuleSoft AI编排实战:企业级LLM集成的架构设计与故障治理
  • Horizon Agent在RDS服务器上的安装与应用程序池发布指南(2111.1版本)
  • 用Cheat Engine给植物大战僵尸“动手术”:从阳光到僵尸血量的完整逆向实战(附C++代码)
  • 告别信息孤岛:如何用OPC UA和Euromap 63协议打通注塑机与MES/云平台
  • MyBatis-Plus 多租户实战
  • AI殖民协议:领地权、资源税与主权退出的多智能体自治设计
  • 网盘直链下载助手:打破下载限制的九大网盘通用解决方案
  • 告别Altera EPM240T100C5N?手把手教你用AG256SL100实现国产CPLD平替(附引脚兼容对照表)
  • MediaPipe人脸检测Python调用包:含关键点定位、边界框识别与姿态估计
  • 告别虚拟机卡顿:实测在Windows 11上用WSL2搭建Matter开发环境(附完整避坑清单)
  • Python语音合成实战:从文本清洗到树莓派部署
  • 架构级Windows系统性能调优:AtlasOS深度解析与实战指南
  • TinyML工程实践:面向嵌入式设备的端侧机器学习落地指南
  • 第【11】期--基于智能反射面的MIMO安全速率最大化研究-maltab完整代码+完整报告
  • 【Springboot毕设全套源码+文档】基于Java的温泉旅游服务管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 如何扩展yoRadio存储:SD卡音乐播放功能实现指南
  • 生存模型拟合优度:从删失数据到临床可信预测的三层验证
  • Guns框架终极指南:如何用Spring Boot + Vue3快速构建企业级管理系统
  • 2026-06-08:恰好 K 个下标对的最大得分。用go语言,给定两个整数数组 nums1(长度 n)和 nums2(长度 m),以及一个整数 k。你需要从两个数组中各选出 k 个下标对,满足下标对
  • 如何用Cyberpunk 2077存档编辑器完全掌控你的夜之城冒险
  • MobileNet v3 + LR-ASPP 道路分割模型训练成果:含权重、代码与完整训练流程
  • cliamp快速上手指南:5分钟在终端享受30,000+在线电台
  • STM32单总线驱动避坑指南:用HAL库搞定DS18B20和DHT11的时序难题
  • DVWA靶场实战:手把手教你用XSS平台盗取Cookie并登录后台(保姆级避坑指南)
  • 从‘单打独斗’到‘团队协作’:新手如何理解CESM中的耦合器CIME与模块运行模式?