桥接模式 rust和java的实现

Claude Code Skills机制深度解析:服务端能力协议与逆向工程实践 AI编程助手的skills并非传统插件或本地脚本,而是一种由服务端定义、动态下发、基于JSON Schema的能力调度协议。其核心原理在于服务端注册中心统一管理能力元数据(ID、触发词、输入/输出契约、上下文约束与灰度规则),客户端仅作轻量映射与请求中转,真实逻辑运行于隔离沙箱中。这种架构赋予了skills高可控性、强安全性和灵活商业化能力,但也导致其天然不可开源——所谓‘源码’实为行为契约的逆向还原。技术价值体现在标准化能力接口(ABI)可被桥接、增强与编排,广泛应用于VS Code插件增强、企业私有网关 阅读详情

桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

介绍

  • 意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
  • 主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
  • 何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。
  • 如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。
应用实例

1、猪八戒从天蓬元帅转世投胎到猪,转世投胎的机制将尘世划分为两个等级,即:灵魂和肉体,前者相当于抽象化,后者相当于实现化。生灵通过功能的委派,调用肉体对象的功能,使得生灵可以动态地选择。
2、墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的。

优点

1、抽象和实现的分离。
2、优秀的扩展能力。
3、实现细节对客户透明。

缺点

桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

使用场景

1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

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

实现

我们有一个作为桥接实现的 DrawAPI 接口和实现了 DrawAPI 接口的实体类 RedCircle、GreenCircle。Shape 是一个抽象类,将使用 DrawAPI 的对象。BridgePatternDemo 类使用 Shape 类来画出不同颜色的圆。
桥接模式的 UML 图
在这里插入图片描述

java

步骤 1
创建桥接实现接口。

DrawAPI.java

public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}

步骤 2
创建实现了 DrawAPI 接口的实体桥接实现类。

RedCircle.java

public class RedCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: red, radius: "
         + radius +", x: " +x+", "+ y +"]");
   }
}

GreenCircle.java

public class GreenCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: green, radius: "
         + radius +", x: " +x+", "+ y +"]");
   }
}

步骤 3
使用 DrawAPI 接口创建抽象类 Shape。

Shape.java

public abstract class Shape {
   protected DrawAPI drawAPI;
   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();  
}

步骤 4
创建实现了 Shape 抽象类的实体类。

Circle.java

public class Circle extends Shape {
   private int x, y, radius;
 
   public Circle(int x, int y, int radius, DrawAPI drawAPI) {
      super(drawAPI);
      this.x = x;  
      this.y = y;  
      this.radius = radius;
   }
 
   public void draw() {
      drawAPI.drawCircle(radius,x,y);
   }
}

步骤 5
使用 Shape 和 DrawAPI 类画出不同颜色的圆。

BridgePatternDemo.java

public class BridgePatternDemo {
   public static void main(String[] args) {
      Shape redCircle = new Circle(100,100, 10, new RedCircle());
      Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
 
      redCircle.draw();
      greenCircle.draw();
   }
}

步骤 6
执行程序,输出结果:

Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[  color: green, radius: 10, x: 100, 100]

rsut

// 画图的接口
trait DrawAPI {
    fn draw_circle(&self,radius:i32,x:i32, y:i32);      
}
// 画h
struct RedCircle {}
impl DrawAPI for RedCircle {
    fn draw_circle(&self,radius:i32,x:i32, y:i32) {
        println!("Drawing Circle[ color: red, radius: {}, x: {}, {}]",radius,x,y);
    }
}
struct GreenCircle {}
impl DrawAPI for GreenCircle  {
    fn draw_circle(&self,radius:i32,x:i32, y:i32) {
        println!("Drawing Circle[ color: green, radius: {}, x: {}, {}]",radius,x,y);
    }
}
trait Shape{
    fn draw(&self);
}
struct Circle{
    // // pub(crate) 使得函数只在当前 crate 中可见
    // 抽象方法的实现
    draw_api:Box<dyn DrawAPI>,
    x:i32,
    y:i32,
    radius:i32
}
impl Circle {
    fn new(draw_api:Box<dyn DrawAPI>,x:i32, y:i32, radius:i32)->Circle {
        Circle{
            draw_api,
            x,
            y,
            radius
        }
    }
}
impl Shape for Circle  {
    fn draw(&self) {
        self.draw_api.draw_circle(self.radius, self.x, self.y)
    }
}
fn main(){
    let r=Circle::new(Box::new(RedCircle{}),100,100, 10);
    let g=Circle::new(Box::new(GreenCircle{}),100,100, 10);
    r.draw();
    g.draw();

}

rust代码仓库

https://github.com/onenewcode/design.git
本教程项目在bin文件夹下的bridge.rs文件中

Kimi Code ACP协议深度解析:重构开发者AI工作流 ACP协议(Agent Communication Protocol)是一种面向编辑器内核的轻量级双向事件流通信机制,它超越传统REST API,通过WebSocket+Protobuf实现毫秒级AI响应,将AI能力嵌入光标移动、断点命中、文件保存等原生编辑事件中。其技术价值在于打破插件与IDE的松耦合瓶颈,使AI真正成为开发手势的一部分——如JetBrains中实时解析Spring Bean依赖、Zed里自动复用Clangd编译参数。典型应用场景覆盖C++内存泄漏定位、ROS2节点通信诊断、AGX交叉编译 阅读详情

相关推荐

红队利器全解析:悬剑5武器库的实战部署与工具链深度剖析

本文深度解析红队渗透测试神器悬剑5武器库,详细介绍了其作为开箱即用平台的三大实战部署方式:虚拟机部署、物理机安装与WTG启动盘。文章重点剖析了Burp Suite、xray、Goby、sqlmap等核心工具链的联动使用技巧,并通过模拟从外网到内网的红队攻击路径,展示了其在渗透测试、应急响应等场景下的高效应用,是安全从业者提升实战效率的利器。

bb456的博客 698

Rust 开发系列PyO3:Rust与Python的联动编程(上)

Rust语言经常被人误认为是R语言,或者Ruby语言……但是做为近十年来tiobe最出人意料的编程语言,从冷门逐渐变成了明星,不过这次我们不讲Rust入门的内容,我们先来看看它一个很实用的功能——与Python的联动编程。为什么要用Rust?答:Rust有很多优点,也有很多缺点,但是下面这个优点可以覆盖所有的缺点:即它能够编写出保证永远不出现内存错误的程序!

2604

Ubuntu上用Nomad部署微服务:轻量、可靠、开箱即用的生产级编排方案

微服务架构的核心挑战在于服务调度、跨语言支持与基础设施协同。Nomad作为轻量级分布式应用调度器,以声明式配置、多驱动兼容(Docker/exec/Java等)和极简运维著称;其与Ubuntu深度集成——通过APT源一键安装、systemd原生管理、ufw/netplan无缝适配,显著降低中小团队的编排门槛。相比Docker Compose缺乏分布式协调能力,以及Kubernetes在小集群场景中过高的资源与学习成本,Nomad在4C8G Ubuntu物理机上实测内存占用仅126MB/节点,支撑23个异构微

weixin_30338481的博客 423

canvas_ity填充风格完全教程:纯色、线性渐变与径向渐变一次讲清

> 💡 **canvas_ity 填充风格完全教程**:canvas_ity 是一个小巧的 single-header C++ 二维光栅化渲染库,本教程将带你一次性讲清它的三种填充风格——纯色填充、线性渐变、径向渐变,包括每个关键函数(set_color、set_linear_gradient、set_radial_gradient、add_color_stop)的参数用法、常见坑位和快速对照表

gitblog_00233的博客 255

逆变器专题(3)-锁相环-PLL

锁相环作为并网逆变器的第一道门户,其锁相的精度将直接影响逆变器是否并网成功,若锁相精度较差,则会直接导致系统的功率因数下降,产生无功等等。在有关文献中指出,提高PLL带宽可以准确且快速进行锁相,而当电网电压含有谐波时,可适当降低带宽抵制谐波的干扰。成为变化量,而如果两者旋转速度达到一致时,所在的交轴分量。ki很大,即带宽很大时,稳定裕度不够,锁相环锁不住。为交流量,当频率锁定而相位没有锁定时,即。,即控制环前馈,可实现将锁相速度的加快。控为0,则可实现系统完美锁相。mod,取余,可减少存储空间。

cyc19980105的博客 6185

Innovus 安装全过程

【代码】Innovus 安装全过程。

lmyynlbcy的博客 5544

Java继承与组合:核心概念与面试必备技巧

面向对象编程(OOP)中,继承与组合是实现代码复用的两大核心机制。继承通过is-a关系建立类层次结构,支持多态特性但存在耦合度高的问题;组合则以has-a关系将功能委托给其他对象,提供更好的灵活性和可维护性。在Java开发中,正确选择这两种方式直接影响系统设计质量,特别是在需要动态扩展的场景(如电商支付系统)或框架开发时。本文通过JVM底层实现、设计模式应用等角度,解析为何大厂面试常考此知识点,并给出组合优先的实际决策方法。

weixin_34268169的博客 380

IEEE Transactions on Industrial Informatics(TII) 投稿须知- Initial Submission

请注意,您可以在作者中心查看稿件的当前状态,如:在EIC办公室、分配给AE、AE邀请审稿人、AE指定审稿人、正在审稿、等待AE决定、等待EIC决定。为了确保公正的评审过程,我们要求在稿件中没有任何作者的身份(不包括作者的姓名、传记、隶属关系、求职信、签署的版权表格、识别脚注、致谢等)。如果你的手稿有很大一部分已经在会议上发表过,论文必须隐藏所有作者的身份,这样会议论文就可以被引用,就好像它是由不同的作者写的一样。请注意,通常你的技术成就是根据被引用的次数来评估的,而不是根据发表的论文数量。

loinleeai的博客 4434

高性能多协议金融交易接口平台:openctp技术深度解析

openctp是一个面向量化交易开发者的企业级金融交易接口平台,提供统一的多协议CTPAPI兼容接口,支持股票、期货、期权、基金、债券等全品种交易。该平台通过创新的协议适配层设计,实现了对华鑫证券奇点、中泰证券XTP、东方财富EMT、东方证券OST、易盛TAP、量投QDP等主流交易柜台的标准化接入,同时提供7x24小时模拟交易环境,为量化策略开发、系统测试和生产部署提供完整的解决方案。 ## 核

gitblog_00078的博客 444

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 517

操作系统原理:【优麒麟】linux内核添加系统调用

在底端添加如下代码。

Joyce_zz的博客 2712

Vue Lynx零基础入门教程:从环境搭建到第一个原生App

Vue Lynx是一款基于Vue 3和字节跳动Lynx渲染引擎的跨端原生开发框架,让开发者能用标准Vue语法开发高性能iOS/Android原生应用。其核心优势包括:双线程架构(JS逻辑线程与UI渲染线程分离)实现原生级性能;100%兼容Vue 3语法;一套代码适配iOS/Android/Web三端。相比WebView套壳方案性能更优,比React Native学习成本更低,特别适合Vue开发者快速开发原生应用Demo或中小型项目。不过目前版本尚处早期,生态不完善,暂不推荐大型商用项目。环境搭建简单,通过L

专注 web 全栈与服务端实战,可视化、Linux 部署、AI 编程工具干货持续更新,沉淀项目落地踩坑笔记。 1325

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7067

GitNexus 使用指南

GitNexus 使用指南

J_bean的博客 1545

VMware16虚拟机:安装Windows10系统---超详细教程

VMware16虚拟机:安装Windows10系统---超详细教程

MQ0522的博客 3万+

《备考系统架构设计师》 - 专栏介绍和目录

本专栏包括所有历年真题及详解、章节知识核心总结、精选高分论文、补充知识、专题总结等。欢迎订阅专栏。

数据知道的博客 4万+

Gemma4与阿里编程模型:开源基座与垂直垂类的双轨演进

大语言模型正从通用能力竞赛转向基座-垂类协同演进的新阶段。开源基座模型如Gemma4通过动态稀疏注意力、分段式RoPE和跨模态token对齐,在32B参数量级实现高性价比推理;而垂直领域模型(如阿里DevFlow)则以AST驱动生成、Git历史建模和工作流原生设计,显著提升代码生成在真实开发场景中的可用性与合规性。这种‘强基座+深垂类’范式,不仅重构了模型评估标准(从基准刷分到工作流嵌入),更直接支撑企业级AI编程助手的私有化落地、CI/CD集成与金融级安全审计。本文聚焦Gemma4架构创新与阿里编程模型的

weixin_34072637的博客 454

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 301

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 522

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 328

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 351

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 557

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 421

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1121

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 368

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 231
上一篇: 黑马点评回顾 redis实现共享session
下一篇: hutool 笔记二 类型转换工具 Convert
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值