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

【unitrix】1.1 密封模式(srcsealed.rs)

一、原码

这段代码展示了一个在 Rust 中实现"密封模式"(Sealed Pattern)的典型方式。

//! 密封模式(Sealed Pattern)实现模块
//!
//! 此模块提供了使用密封模式限制 trait 实现的工具,
//! 确保只有当前 crate 内定义的类型能够实现特定 trait,
//! 从而保证 API 的稳定性。/// 密封 trait,用于限制 trait 的实现范围
///
/// 这个 trait 是私有的,外部 crate 无法实现它。
/// 通过将它作为其他 trait 的 supertrait,
/// 可以确保只有当前 crate 内的类型能够实现那些 trait。
///
/// # 设计模式参考
/// 这是 Rust 中常用的"密封模式"(Sealed Pattern)的实现,
/// 用于控制 trait 实现的可见性范围。
pub trait Sealed {}

二、工作原理和用途

密封模式的目的
  1. 限制 trait 实现范围:确保只有当前 crate 内定义的类型能够实现特定 trait

  2. 保证 API 稳定性:防止外部代码实现你的 trait,这样你可以在不破坏下游代码的情况下修改 trait

代码解析
pub trait Sealed {}
  1. 定义了一个名为 Sealed 的公开 trait

  2. 关键点:虽然 trait 本身是 pub 的,但它没有方法(只是一个标记 trait)

工作原理
  1. 作为 supertrait:当你想限制某个 trait 的实现时,可以这样定义:
pub trait MyRestrictedTrait: Sealed {// 方法定义
}
  1. 实现控制:
  • 因为 Sealed 是 MyRestrictedTrait 的 supertrait

  • 只有能实现 Sealed 的类型才能实现 MyRestrictedTrait

  • 而 Sealed trait 虽然公开,但它的实现只能在当前 crate 内(因为没有文档化,且通常不会提供实现方法)

  1. 效果:
  • 外部 crate 看到 MyRestrictedTrait 需要 Sealed,但无法实现 Sealed

  • 只有当前 crate 内的类型可以实现 Sealed,从而可以实现 MyRestrictedTrait

为什么有效

Rust 的可见性规则:

  • 即使 trait 是 pub 的,如果它的所有实现都必须使用私有类型或满足私有条件,那么外部仍然无法实现它

  • 因为 Sealed 没有提供任何实现方式给外部 crate(没有方法且文档不公开如何实现)

使用场景举例
// 在当前 crate 中
struct MyType;impl Sealed for MyType {}  // 只有当前 crate 能这样做impl MyRestrictedTrait for MyType {// 实现方法
}

外部 crate 尝试实现时会失败:

struct ExternalType;impl Sealed for ExternalType {}  // 错误:无法为外部类型实现 crate 内部的 Sealed traitimpl MyRestrictedTrait for ExternalType {}  // 错误:缺少 Sealed 实现

这是一种在 Rust 中优雅地限制 trait 实现的模式,被标准库和许多知名库广泛使用。

http://www.xdnf.cn/news/13426.html

相关文章:

  • SQL29 验证刷题效果,输出题目真实通过率
  • Spring声明式事务生效是有条件滴!
  • 达梦数据库单机部署dmhs同步复制(dm8->kafka)
  • MFC 第1章:适配 WIndows 编程的软件界面调整
  • 如何诊断服务器硬盘故障?出现硬盘故障如何处理比较好?
  • 【沉浸式解决问题】Idea运行Junit测试中scanner无法获取控制台的输入内容
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试对话标题自动总结
  • 看安科瑞分布式光伏解决方案如何破解光伏痛点?
  • Python实战案例详解:基于计算器项目的扩展应用
  • 前端框架vue3的变化之处
  • API:解锁数字化协作的钥匙及开放实现路径深度剖析
  • HakcMyVM-Blackhat
  • Ubuntu 24.04 上安装与 Docker 部署 Sentinel
  • UE5 学习系列(六)导入资产包
  • BW非法字符处理
  • 智能空气流向控制系统SKLX的优化与实践
  • Hi3519DV500开发板适配新sensor的详细流程(最新版)
  • 96页PPT华为销售战略规划市场洞察品牌策略
  • Squid 代理服务器实战:解决动态 IP 访问第三方接口的生产级方案
  • 多系统合路器(POI)详解
  • 【数据结构】 优先级队列 —— 堆
  • 波形合成之C语言实现
  • NuGet 从入门到精进全解析
  • Intel Boot Guard
  • 系统集成自动化流程编排实现条件分支高级篇(二)
  • 实战使用docker compose 搭建 Redis 主从复制集群
  • 依存句法分析
  • Cockpit:一个开源的 Linux 系统管理工具
  • 蚁群算法(Ant Colony Optimization)原理与应用解析
  • (功能测试Charles)如何抓取手机http的报文