建造者模式是一种创建型设计模式,它将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。核心思想是指挥者定流程,建造者填细节,通过多个步骤逐步构建对象,并允许灵活组合这些步骤以生成不同配置的对象。通过将复杂对象的构建步骤抽象化,实现了"流程固定、配置可变"的灵活创建方式。

介绍

核心角色

  1. 产品(Product):被构建的复杂对象(如电脑、汽车)。
  2. 抽象建造者(Abstract Builder):定义构建产品的抽象方法(步骤)和返回产品的接口。
  3. 具体建造者(Concrete Builder):实现抽象建造者的方法,完成具体的构建步骤,并提供获取产品的方式。
  4. 指挥者(Director):控制构建流程(调用建造者的步骤),隔离客户端与构建过程。

优点

  1. 分离构建与表示:构建流程(指挥者)与具体部件配置(建造者)分离,便于扩展新产品。
  2. 灵活定制:通过更换具体建造者,可在不改变流程的情况下生成不同配置的对象。
  3. 精确控制构建过程:分步构建允许在每个步骤中加入校验或逻辑,确保对象正确构建。
  4. 代码复用:公共构建流程在指挥者中实现,避免重复编码。

适用场景

  1. 构建复杂对象
    当对象包含多个部件(如电脑、汽车、文档),且构建步骤固定但部件配置可变时(如不同配置的电脑)。
  2. 需要多种表示形式
    同一构建流程需生成不同产品(如同一文档模板生成PDF、Word、HTML版本)。
  3. 构建过程需精细控制
    需分步构建对象,或需要在构建过程中调整步骤(如先装CPU再装内存,顺序不可乱)。

实现

以组装电脑为例,电脑包含CPU、内存、显卡等部件,用户可定制不同配置(如办公电脑、游戏电脑),适合用建造者模式分离"组装流程"和"具体配置"。

#include <string>
#include <iostream>
#include <vector>// 产品:电脑
class Computer {
private:std::string cpu;    // 处理器std::string memory; // 内存std::string graphics; // 显卡std::string storage; // 存储
public:void setCPU(const std::string& c) { cpu = c; }void setMemory(const std::string& m) { memory = m; }void setGraphics(const std::string& g) { graphics = g; }void setStorage(const std::string& s) { storage = s; }// 展示电脑配置void showInfo() const {std::cout << "CPU: " << cpu << "\n"<< "内存: " << memory << "\n"<< "显卡: " << graphics << "\n"<< "存储: " << storage << std::endl;}
};// 抽象建造者:定义电脑组装步骤
class ComputerBuilder {
public:virtual ~ComputerBuilder() = default;virtual void buildCPU() = 0;    // 构建CPUvirtual void buildMemory() = 0; // 构建内存virtual void buildGraphics() = 0; // 构建显卡virtual void buildStorage() = 0; // 构建存储virtual Computer* getResult() = 0; // 返回组装好的电脑
};// 具体建造者1:办公电脑
class OfficeComputerBuilder : public ComputerBuilder {
private:Computer* computer; // 正在构建的电脑
public:OfficeComputerBuilder() { computer = new Computer(); }~OfficeComputerBuilder() override { delete computer; }void buildCPU() override {computer->setCPU("Intel i5"); // 办公级CPU}void buildMemory() override {computer->setMemory("16GB DDR4"); // 中等内存}void buildGraphics() override {computer->setGraphics("集成显卡"); // 无需独立显卡}void buildStorage() override {computer->setStorage("512GB SSD"); // 够用的存储}Computer* getResult() override {return computer; // 返回构建好的电脑(转移所有权)}
};// 具体建造者2:游戏电脑
class GameComputerBuilder : public ComputerBuilder {
private:Computer* computer;
public:GameComputerBuilder() { computer = new Computer(); }~GameComputerBuilder() override { delete computer; }void buildCPU() override {computer->setCPU("Intel i9"); // 高性能CPU}void buildMemory() override {computer->setMemory("32GB DDR5"); // 大容量高速内存}void buildGraphics() override {computer->setGraphics("NVIDIA RTX 4090"); // 顶级显卡}void buildStorage() override {computer->setStorage("2TB SSD"); // 大容量存储}Computer* getResult() override {return computer;}
};// 指挥者:控制构建流程
class Director {
private:ComputerBuilder* builder; // 指向当前建造者
public:explicit Director(ComputerBuilder* b) : builder(b) {}// 切换建造者void setBuilder(ComputerBuilder* b) {builder = b;}// 执行构建流程(固定步骤)Computer* construct() {builder->buildCPU();builder->buildMemory();builder->buildGraphics();builder->buildStorage();return builder->getResult(); // 返回最终产品}
};int main() {// 1. 创建具体建造者(办公电脑)ComputerBuilder* officeBuilder = new OfficeComputerBuilder();Director director(officeBuilder);  // 指挥者控制构建流程Computer* officePC = director.construct();  // 执行构建std::cout << "=== 办公电脑配置 ===" << std::endl;officePC->showInfo();// 2. 创建具体建造者(游戏电脑)ComputerBuilder* gameBuilder = new GameComputerBuilder();director.setBuilder(gameBuilder);  // 切换建造者Computer* gamePC = director.construct();std::cout << "\n=== 游戏电脑配置 ===" << std::endl;gamePC->showInfo();// 清理资源delete officePC;delete gamePC;delete officeBuilder;delete gameBuilder;return 0;
}

输出结果

=== 办公电脑配置 ===
CPU: Intel i5
内存: 16GB DDR4
显卡: 集成显卡
存储: 512GB SSD=== 游戏电脑配置 ===
CPU: Intel i9
内存: 32GB DDR5
显卡: NVIDIA RTX 4090
存储: 2TB SSD

应用场景

  1. 产品配置
    • 电子产品组装(如电脑、手机的不同型号配置)。
    • 汽车制造(同一车型的标准版、豪华版、运动版)。
  2. 文档生成
    • 报告生成工具(同一内容生成PDF、Markdown、HTML格式)。
    • 代码生成器(根据模板生成不同语言的代码)。
  3. 复杂对象创建
    • 游戏角色创建(同一角色模型,不同装备、技能配置)。
    • 数据库连接池(不同参数配置的连接对象)。
  4. 框架与库
    • C++ STL中的stringstream(分步构建字符串)。
    • 建造者模式在JSON/XML解析器中用于构建树形结构。

优化

优化方向

  1. 支持动态自定义配置:允许客户端灵活设置每个部件(而非局限于预设的“办公/游戏”配置)。
  2. 引入可选部件与校验:支持非必需部件(如散热器、声卡),并添加部件兼容性校验。
  3. 使用智能指针管理资源:避免手动内存管理,防止内存泄漏。
  4. 流畅接口(Fluent Interface):通过链式调用简化建造过程,提升代码可读性。
  5. 指挥者功能增强:支持自定义构建流程(如可选步骤、步骤顺序调整)。
#include <string>
#include <iostream>
#include <vector>
#include <memory> // 智能指针
#include <stdexcept> // 异常处理// 产品:电脑(支持更多部件和兼容性校验)
class Computer {
private:std::string cpu;std::string memory;std::string graphics; // 可选:集成/独立显卡std::string storage;std::string cooler;   // 可选:散热器std::vector<std::string> compatibleCPUs = {"Intel i5", "Intel i9", "AMD Ryzen 5"};std::vector<std::string> compatibleMemories = {"16GB DDR4", "32GB DDR5", "64GB DDR5"};public:// 链式设置方法(Fluent Interface)Computer& setCPU(const std::string& c) { // 校验CPU兼容性if (std::find(compatibleCPUs.begin(), compatibleCPUs.end(), c) == compatibleCPUs.end()) {throw std::invalid_argument("不支持的CPU型号:" + c);}cpu = c; return *this; }Computer& setMemory(const std::string& m) { if (std::find(compatibleMemories.begin(), compatibleMemories.end(), m) == compatibleMemories.end()) {throw std::invalid_argument("不支持的内存型号:" + m);}memory = m; return *this; }Computer& setGraphics(const std::string& g) { graphics = g; return *this; }Computer& setStorage(const std::string& s) { storage = s; return *this; }Computer& setCooler(const std::string& c) { cooler = c; return *this; }// 展示配置(包含可选部件)void showInfo() const {std::cout << "CPU: " << cpu << "\n"<< "内存: " << memory << "\n"<< "显卡: " << (graphics.empty() ? "无(集成)" : graphics) << "\n"<< "存储: " << storage << "\n"<< "散热器: " << (cooler.empty() ? "无(默认)" : cooler) << std::endl;}// 校验必填部件是否齐全bool isValid() const {return !cpu.empty() && !memory.empty() && !storage.empty();}
};// 抽象建造者(支持链式调用和智能指针)
class ComputerBuilder {
public:using Ptr = std::unique_ptr<ComputerBuilder>; // 智能指针管理virtual ~ComputerBuilder() = default;// 纯虚方法:构建步骤(支持链式返回)virtual ComputerBuilder& buildCPU() = 0;virtual ComputerBuilder& buildMemory() = 0;virtual ComputerBuilder& buildGraphics() { return *this; } // 可选步骤(默认空实现)virtual ComputerBuilder& buildStorage() = 0;virtual ComputerBuilder& buildCooler() { return *this; }   // 可选步骤// 返回产品(智能指针,自动释放)virtual std::unique_ptr<Computer> getResult() {if (!computer->isValid()) {throw std::logic_error("电脑配置不完整,缺少必填部件");}return std::move(computer); // 转移所有权}protected:std::unique_ptr<Computer> computer = std::make_unique<Computer>(); // 产品
};// 具体建造者1:办公电脑(基础配置,可选散热器)
class OfficeComputerBuilder : public ComputerBuilder {
public:ComputerBuilder& buildCPU() override {computer->setCPU("Intel i5");return *this;}ComputerBuilder& buildMemory() override {computer->setMemory("16GB DDR4");return *this;}// 办公电脑默认无独立显卡(使用集成),无需重写buildGraphicsComputerBuilder& buildStorage() override {computer->setStorage("512GB SSD");return *this;}// 可选:为办公电脑添加低端散热器ComputerBuilder& buildCooler() override {computer->setCooler("基础风冷散热器");return *this;}
};// 具体建造者2:游戏电脑(高性能配置,强制独立显卡和散热器)
class GameComputerBuilder : public ComputerBuilder {
public:ComputerBuilder& buildCPU() override {computer->setCPU("Intel i9");return *this;}ComputerBuilder& buildMemory() override {computer->setMemory("32GB DDR5");return *this;}// 游戏电脑必须有独立显卡(重写为强制步骤)ComputerBuilder& buildGraphics() override {computer->setGraphics("NVIDIA RTX 4090");return *this;}ComputerBuilder& buildStorage() override {computer->setStorage("2TB SSD");return *this;}// 游戏电脑必须有高性能散热器ComputerBuilder& buildCooler() override {computer->setCooler("水冷散热器");return *this;}
};// 具体建造者3:自定义建造者(允许客户端自由配置)
class CustomComputerBuilder : public ComputerBuilder {
public:// 空实现,由客户端手动调用产品的set方法配置ComputerBuilder& buildCPU() override { return *this; }ComputerBuilder& buildMemory() override { return *this; }ComputerBuilder& buildStorage() override { return *this; }// 提供直接访问产品的接口(用于自定义配置)Computer* getComputer() { return computer.get(); }
};// 指挥者(支持灵活流程和可选步骤)
class Director {
public:// 构建基础电脑(必填部件:CPU、内存、存储)std::unique_ptr<Computer> buildBasic(ComputerBuilder::Ptr builder) {builder->buildCPU()->buildMemory()->buildStorage();return builder->getResult();}// 构建完整电脑(包含可选部件)std::unique_ptr<Computer> buildFull(ComputerBuilder::Ptr builder) {builder->buildCPU()->buildMemory()->buildGraphics()->buildStorage()->buildCooler();return builder->getResult();}// 自定义流程(按传入的步骤函数执行)using StepFunc = std::function<void(ComputerBuilder*)>;std::unique_ptr<Computer> buildCustom(ComputerBuilder::Ptr builder, const std::vector<StepFunc>& steps) {for (const auto& step : steps) {step(builder.get());}return builder->getResult();}
};int main() {try {Director director;// 1. 构建办公电脑(基础配置)std::cout << "=== 办公电脑(基础配置) ===" << std::endl;auto officeBasic = director.buildBasic(std::make_unique<OfficeComputerBuilder>());officeBasic->showInfo();// 2. 构建游戏电脑(完整配置)std::cout << "\n=== 游戏电脑(完整配置) ===" << std::endl;auto gameFull = director.buildFull(std::make_unique<GameComputerBuilder>());gameFull->showInfo();// 3. 自定义电脑(自由配置部件)std::cout << "\n=== 自定义电脑 ===" << std::endl;auto customBuilder = std::make_unique<CustomComputerBuilder>();// 直接配置产品的具体部件(链式调用)customBuilder->getComputer()->setCPU("AMD Ryzen 5")->setMemory("64GB DDR5")->setGraphics("AMD Radeon RX 7900")->setStorage("4TB SSD")->setCooler("高端风冷散热器");// 用指挥者构建(此处仅做校验)auto customPC = director.buildBasic(std::move(customBuilder));customPC->showInfo();// 4. 自定义构建流程(动态指定步骤)std::cout << "\n=== 动态流程构建(仅CPU+内存+存储) ===" << std::endl;auto dynamicBuilder = std::make_unique<CustomComputerBuilder>();dynamicBuilder->getComputer()->setCPU("Intel i5")->setMemory("32GB DDR4")->setStorage("1TB SSD");// 定义自定义步骤(仅执行CPU和内存校验)std::vector<Director::StepFunc> steps = {[](ComputerBuilder* b) { b->buildCPU(); },  // 实际是校验CPU已设置[](ComputerBuilder* b) { b->buildMemory(); } // 校验内存已设置};auto dynamicPC = director.buildCustom(std::move(dynamicBuilder), steps);dynamicPC->showInfo();} catch (const std::exception& e) {std::cerr << "错误:" << e.what() << std::endl;return 1;}return 0;
}

输出结果

=== 办公电脑(基础配置) ===
CPU: Intel i5
内存: 16GB DDR4
显卡: 无(集成)
存储: 512GB SSD
散热器: 无(默认)=== 游戏电脑(完整配置) ===
CPU: Intel i9
内存: 32GB DDR5
显卡: NVIDIA RTX 4090
存储: 2TB SSD
散热器: 水冷散热器=== 自定义电脑 ===
CPU: AMD Ryzen 5
内存: 64GB DDR5
显卡: AMD Radeon RX 7900
存储: 4TB SSD
散热器: 高端风冷散热器=== 动态流程构建(仅CPU+内存+存储) ===
CPU: Intel i5
内存: 32GB DDR4
显卡: 无(集成)
存储: 1TB SSD
散热器: 无(默认)

优化点说明

  1. 动态自定义配置
    • 新增CustomComputerBuilder,允许客户端通过getComputer()直接访问产品,自由设置部件(如setCPU("AMD Ryzen 5")),突破预设配置的限制。
    • 配合链式调用(obj->setA()->setB()),使配置代码更简洁直观。
  2. 可选部件与校验机制
    • 将显卡、散热器设为可选部件,抽象建造者中提供默认空实现,具体建造者按需重写(如游戏电脑必须实现buildGraphics)。
    • 产品内部添加兼容性校验(如compatibleCPUs)和完整性校验(isValid()),避免无效配置(如使用不支持的CPU型号)。
  3. 智能指针与资源安全
    • 使用std::unique_ptr管理建造者和产品的生命周期,无需手动delete,彻底避免内存泄漏。
    • 产品所有权通过std::move转移,明确资源归属。
  4. 指挥者功能增强
    • 提供多种预设流程(buildBasic基础配置、buildFull完整配置),满足不同场景需求。
    • 支持自定义流程(buildCustom),通过函数对象动态指定步骤,灵活度极高(如仅构建CPU+内存+存储)。
  5. 扩展性提升
    • 新增部件(如未来添加“声卡”)时,只需在Computer中添加setSoundCard方法,抽象建造者中添加默认空实现,无需修改现有建造者和指挥者,符合开闭原则。

优点

  1. 更高的灵活性:支持预设配置、完全自定义配置、动态流程配置,适应多样化需求。
  2. 更强的安全性:智能指针自动管理内存,校验机制避免无效配置,异常处理明确错误原因。
  3. 更好的扩展性:新增部件或流程时,对现有代码侵入性极小,易于维护。
  4. 更优的易用性:链式调用和多样化构建接口降低使用门槛,客户端可按需选择复杂度。

适用场景

  • 复杂产品定制平台:如电商网站的“自定义PC”功能,用户可自由选择每个部件,系统自动校验兼容性。
  • 动态报表生成:允许用户选择报表包含的模块(表格、图表、摘要),按自定义顺序组装。
  • 游戏角色创建器:玩家可选择角色的种族、职业、技能、装备,系统确保选择组合有效(如某些技能仅特定种族可用)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917514.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917514.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917514.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【09】C++实战篇——C++ 生成静态库.lib 及 C++调用lib,及实际项目中的使用技巧

文章目录1 C 静态库.lib 生成1.1 静态库lib的生成方法和使用方法1.2 创建静态库项目1.3 编写.h 和 .cpp文件1.4 设置 及 生成 DLL2 调用 C 静态库lib2.1 新建LIBtest及测试代码2.2 静态库配置 及代码调用测试3 实际项目中的使用技巧、及通用设置3.1 设置lib输出路径3.2 设置头文…

飞算JavaAI:从写不出代码到丝滑开发,飞算JavaAI把小白从编程深渊捞进了正轨---它都让我怀疑自己是不是多余的!

开篇介绍 对于很多初学者来说&#xff0c;编程是一项既有趣又充满挑战的任务。面对复杂的代码和繁琐的开发流程&#xff0c;常常会感到无从下手。不过&#xff0c;现在有了飞算JavaAI&#xff0c;这一切都将变得简单起来。 它有啥实用功能呢&#xff1f; 比如&#xff1a; …

关于tresos Studio(EB)的MCAL配置之GtmCfg

Generic Time Module通用时钟模块GeneralGtmCfg_DevErrorDetect开发者错误检测开关GtmCfg_DemErrorReporting诊断错误报告开关GtmCfg_VersionInfoApi获取版本信息的接口开关GtmCfg_ConfigSetClockManagementUnitGlobal_Clock_Control_Numerator全局时钟分频器的分子Global_Cloc…

深入探索Weaviate:构建高效AI应用的数据库解决方案

在当今数据驱动的世界中&#xff0c;高效地存储、检索和处理大规模数据成为了AI应用开发的关键挑战。Weaviate作为一个开源的向量搜索引擎&#xff0c;凭借其强大的功能和灵活的架构&#xff0c;正逐渐成为开发者构建智能AI应用的首选工具。本文将深入探讨Weaviate的核心概念、…

【开源】一款开源、跨平台的.NET WPF 通用权限开发框架 (ABP) ,功能全面、界面美观

文章目录一、开源地址二、框架介绍三、技术路线四、适用场景五、功能模块六、框架演示截图一、开源地址 Gihub地址&#xff1a; https://github.com/HenJigg/wpf-abp B站学习视频&#xff1a;https://www.bilibili.com/video/BV1nY411a7T8?spm_id_from333.788.player.switch&…

信创缓存中间件-TongRDS(Redis平替)安装

TongRDS 是由东方通开发的国产 分布式内存数据缓存中间件&#xff0c;功能类似于 Redis&#xff0c;但它是完全自主研发的国产产品&#xff0c;是国内信创的一大重要组件。它兼容 Redis 的接口&#xff0c;能做到应用代码无需改动即可替换使用。TongRDS是没有直接的下载地址的。…

Git链接备用手册

三板斧及其他&#xff1a;git init&#xff1a;初始化git仓库git add . :将所在文件夹中的所有文件加入到暂存区git commit -m 自定义记录信息 &#xff1a;将暂存区中的数据放到Git的仓库&#xff08;本地&#xff09;中&#xff0c;并进行记录&#xff08;自定义&#xff0…

零信任网络概念及在网络安全中的应用

零信任网络概念及在网络安全中的应用 零信任网络&#xff08;Zero Trust Network&#xff09;是一种颠覆传统边界安全的架构理念&#xff0c;其核心是**“永不信任&#xff0c;始终验证”**&#xff08;Never Trust, Always Verify&#xff09;。它假设网络内外均存在威胁&…

GaussDB case when的用法

1 case函数的类型case具有两种格式&#xff0c;简单case函数和case搜索函数。这两种方式&#xff0c;大部分情况下可以实现相同的功能。1.1 简单case函数语法case column when <condition> then value when <condition> then value ...... else value end;示例case…

Git用法记录

代码中冲突标记的含义&#xff1a;<<<<<<< HEAD 标记当前分支&#xff08;或本地&#xff09;的旧代码作为分隔线 >>>>>>> [commit哈希] 标记从其他分支合并过来的新代码&#xff08;这里的 c472b4b... 是提交哈希&#xff09; 暂存…

解决Android Studio中创建的模拟器第二次无法启动的问题

Android Studio中创建的模拟器&#xff0c;首次启动时一切正常。但是关闭模拟器&#xff0c;下一次启动时一直显示&#xff1a;Connecting to the Emulator&#xff0c;无法启动。无法启动的原因通常是默认开启了模拟器的快速启动功能&#xff0c;首次启动时是“冷启动”&#…

Linux设备驱动架构相关文章

学习一个领域&#xff0c;最好是从多个角度去学习&#xff0c;总有一个角度适合你。学习Linux驱动&#xff0c;从架构的角度把握&#xff0c;比直接看代码更容易接受。以架构为主&#xff0c;结合细节学习&#xff0c;我称之为自上而下的学习方法&#xff0c;就一个字&#xff…

YOLOv13 汉化优化部署版本:超图增强自适应视觉感知的目标检测系统

目录 &#x1f4d6; 项目概述&#x1f680; YOLOv13 核心特性&#x1f4ca; 性能对比&#x1f5bc;️ 可视化效果&#x1f527; 项目优化改进⚙️ 快速部署指南▶️ 运行使用&#x1f4dd; 使用示例&#x1f527; 故障排除&#x1f31f; 项目特色&#x1f517; 相关链接&#…

uni-app webview的message监听不生效(uni.postmessage is not a function)

uni-app开发app web-view组件message事件不触发背景子页面是h5&#xff08;非uni-app版&#xff09;子页面是h5&#xff08;uni-app版&#xff09;背景 大致背景是 在uni-app开发的客户端app中使用web-view嵌入h5页面&#xff0c;在h5中通过postmessage API触发父组件web-view…

【异常案例分析】使用空指针调用函数(非虚函数)时,没有崩溃在函数调用处,而是崩在被调用函数内部

目录 1、问题说明 2、代码段地址与数据段地址 3、使用空指针调用BindWindow函数&#xff08;非虚函数&#xff09;&#xff0c;没有崩在BindWindow函数的调用处&#xff0c;而是崩在函数内部 3.1、虚函数调用的二次寻址 3.2、崩溃在被调用函数内部 4、总结 C软件异常排查…

锁定中科院1区TOP!融合LSTM与Attention做时间序列预测 !

Transformer虽火&#xff0c;但在数据少、要求稳的时序预测场景中&#xff0c;LSTM仍是首选。尤其加上注意力机制后&#xff0c;更是弥补了LSTM的短板&#xff0c;增强了性能&#xff0c;实现了更精确的预测。这种组合不仅应用场景广泛&#xff0c;工业界爱&#xff0c;学术界也…

在不可更改系统上构建数据响应机制的可选策略

在现代企业信息系统架构中&#xff0c;我们常常面临如下挑战&#xff1a;某个业务系统属于“不可变更系统”&#xff0c;我们既不能修改其业务逻辑&#xff0c;也不能对其核心代码做任何侵入式改动。但与此同时&#xff0c;我们又需要对该系统中的某些关键业务数据变更做出响应…

Docker 实战 -- cloudbeaver

文章目录前言文件目录docker-compose.yml网络连接前言 当你迷茫的时候&#xff0c;请点击 Docker 实战目录 快速查看前面的技术文章&#xff0c;相信你总能找到前行的方向 上一篇文章 Docker 实战 – Mysql 讲述了用 docker 搭建 mysql 数据库的过程, 连接数据库的工具很多, …

Rust × WebAssembly 项目脚手架详解

一、模板概览 模板生成方式核心用途典型角色wasm-pack-templatecargo generate …把 Rust 代码 打包成 npm 库「底层算法/组件」作者create-wasm-appnpm init wasm-app构建纯 JS/TS 项目&#xff0c;消费上面生成的 npm 包Web 前端/Node 服务rust-webpack-templatenpm init ru…

RSA 解密逻辑

以下是使用类的方式封装 RSA 解密逻辑&#xff0c;使其更易于调用和管理&#xff1a; from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 class RSADecryptor:"""RSA 解密工具类&#xff0c;封装解密逻辑&#xff0c;方便…