用Rust实现23种设计模式之建造者模式

当使用 Rust 实现建造者模式时,我们可以通过结构体和方法链来实现。建造者模式是一种创建型设计模式,它允许你按照特定的顺序构建复杂对象,同时使你能够灵活地构建不同的变体。下面是一个使用 Rust 实现建造者模式的示例,

在示例中,我们首先定义了要构建的复杂对象的结构体 Product ,它具有三个部分。

然后,我们定义了建造者结构体 Builder ,它具有与 Product 结构体相同的三个可选字段,表示正在构建的产品的各个部分。

在 Builder 结构体中,我们实现了一系列方法,用于设置产品的各个部分,并使用方法链的方式来方便地设置多个部分。

最后,我们在 build 方法中检查是否所有的部分都已设置,如果缺少某个部分,则会触发断言错误。然后,我们从建造者中获取各个部分,并使用它们构建一个 Product 实例。

在 main 函数中,我们创建了一个建造者实例,并使用方法链设置各个部分。最后,我们通过调用 build 方法来构建产品,并输出构建的产品的各个部分。

通过建造者模式,我们可以按照特定的顺序构建复杂对象,并且可以根据需求构建不同的变体,同时保持代码的可读性和可维护性。

bash 复制代码
// 定义要构建的复杂对象的结构体
struct Product {
    part1: String,
    part2: String,
    part3: String,
}
 // 定义建造者结构体
struct Builder {
    part1: Option<String>,
    part2: Option<String>,
    part3: Option<String>,
}
 impl Builder {
    // 创建一个新的建造者实例
    fn new() -> Self {
        Builder {
            part1: None,
            part2: None,
            part3: None,
        }
    }
     // 设置第一部分
    fn set_part1(&mut self, part1: String) -> &mut Self {
        self.part1 = Some(part1);
        self
    }
     // 设置第二部分
    fn set_part2(&mut self, part2: String) -> &mut Self {
        self.part2 = Some(part2);
        self
    }
     // 设置第三部分
    fn set_part3(&mut self, part3: String) -> &mut Self {
        self.part3 = Some(part3);
        self
    }
     // 构建产品
    fn build(&self) -> Product {
        // 检查是否所有的部分都已设置
        assert!(
            self.part1.is_some() && self.part2.is_some() && self.part3.is_some(),
            "部分缺失,无法构建产品"
        );
         // 从建造者中获取各个部分
        let part1 = self.part1.clone().unwrap();
        let part2 = self.part2.clone().unwrap();
        let part3 = self.part3.clone().unwrap();
         // 返回构建的产品
        Product { part1, part2, part3 }
    }
}
 fn main() {
    // 创建建造者实例
    let mut builder = Builder::new();
     // 通过方法链设置各个部分
    builder
        .set_part1("Part 1".to_string())
        .set_part2("Part 2".to_string())
        .set_part3("Part 3".to_string());
     // 构建产品
    let product = builder.build();
     // 输出构建的产品
    println!(
        "构建的产品:part1={}, part2={}, part3={}",
        product.part1, product.part2, product.part3
    );
}
相关推荐
阿正的梦工坊17 分钟前
【Rust】04-借用、引用与切片
java·数据库·rust
福大大架构师每日一题22 分钟前
2026年6月TIOBE编程语言排行榜,Go语言排名第13,Rust语言排名12。关于Rust已进入平台期的报道似乎为时过早。
开发语言·golang·rust
咸甜适中43 分钟前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust
guyoung1 小时前
BoxAgnts 工具系统(4)——Tool Trait 与并发上下文模型
rust·agent·ai编程
qq_297574671 小时前
设计模式系列文章(基础篇第21篇):迭代器模式——遍历聚合解耦,实现统一迭代访问
设计模式·迭代器模式
禅思院3 小时前
前端请求取消与调度完全指南:从 AbortController 到企业级优先级架构
前端·设计模式·前端框架
小bo波3 小时前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
techdashen4 小时前
What is maintenance, anyway?
开发语言·后端·rust
阿正的梦工坊4 小时前
【Rust】05-结构体、枚举与模式匹配
java·数据库·rust
星栈4 小时前
Makepad 应用如何读文件、调接口、保存数据
前端·rust