Rust中如何实现Builder模式

发布时间:2021-12-28 11:47:50 作者:小新
来源:亿速云 阅读:118

小编给大家分享一下Rust中如何实现Builder模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

示例

通常在 Rust 中的实现是通过 不断重建 Builder 来构造最后的类型:


      
    
    
struct Counter {    counted1: usize,    counted2: usize,    done: bool,}
struct CounterBuilder {    counted1: usize,    counted2: usize,}
impl CounterBuilder {    // 构建器需要有默认的参数配置,然后从默认配置触发进行构建。    // 不适用 #[derive(std::default::Default)],因为默认配置可能不一样    fn default() -> Self {        CounterBuiler {            counted1: 5,            counted2: 0,        }    }
   // 属性定制方法。消耗原本的构建器,修改属性后重新生成新构建器    fn set_counted1(self, cnt: usize) -> Self {        self.counted1 = cnt;        self    }
   fn set_counted2(self, cnt: usize) -> Self {        self.counted2 = cnt;        self    }
   // 最后通过 `build` 方法生成所需类型    fn build(self) -> Counter {        Counter {            counted1: self.counted1,            counted2: self.counted2,            done: false,        }    }}
             
   

个人实践

在设置属性方法的时候,通常的实现是通过消耗原本的构造器后生成新构造器,这使得如果配置构造器的过程不能连续调用属性设置方法时,必须重新捕获构造器:


      
    
    
let mut builder = CounterBuilder::default();
// ... 进行一些计算,获得需要配置的值let cnt1 = operations();
builder = builder.set_counted1(cnt);
// ... 进行一些计算,获得需要配置的值let cnt2 = operations();
builder = builder.set_counted(cnt2);
             
 

以上代码通常出现在需要流计算并及时记录参数配置的时候。并且,如果构造器被更大型的数据结构持有时,消耗并重新构建构造器可能会对性能有点影响。因此在博主个人实现时通常采取传递&mut self 引用的方法来实现属性设置方法:


      
    
    
    // ...    // 属性定制方法。消耗原本的构建器,修改属性后重新生成新构建器    fn set_counted1(&mut self, cnt: usize) -> &mut Self {        self.counted1 = cnt;        self    }
   fn set_counted2(&mut self, cnt: usize) -> &mut Self {        self.counted2 = cnt;        self    }
// ...
             
 

改成如上形式的函数签名,即可 灵活构造 目标结构:


      
    
    
let mut builder = CounterBuilder::default();
// ... 进行一些计算,获得需要配置的值let cnt1 = operations();
builder.set_counted1(cnt);
// ... 进行一些计算,获得需要配置的值let cnt2 = operations();
builder.set_counted(cnt2);
// ... 可能还要等待别的操作完成后再进行构建
let counter = builder.build();
             
   

为什么使用构造器模式

 

为什么不使用构造器模式

构造器模式由于有以下缺点而在部分场景中不适用:


以上是“Rust中如何实现Builder模式”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. Java中Builder模式的作用是什么
  2. 详解java构建者模式Builder

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

rust builder

上一篇:XMemcached有什么特点以及在哪些方面还需要改进

下一篇:如何实现EMC电磁兼容的全面分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》