Rust的私有构造函数模式
最近在看 sidekiq-rs 这个库的源码时,发现了一个有趣的设计模式,就是私有构造函数模式。这个模式在 Rust 中非常有用,可以用来隐藏一些细节,同时也可以保证某些对象只能通过特定的方式来创建。代码大概是这样的:
#[derive(Clone)]
#[allow(clippy::manual_non_exhaustive)]
pub struct ProcessorConfig {
pub num_workers: usize,
_private: (),
}
impl ProcessorConfig {
#[must_use]
pub fn num_workers(mut self, num_workers: usize) -> Self {
self.num_workers = num_workers;
self
}
}
impl Default for ProcessorConfig {
fn default() -> Self {
Self {
num_workers: num_cpus::get(),
_private: Default::default(),
}
}
}
因为增加了 _private
字段,所以不能再外部直接创建 ProcessConfig
,只能通过 ProcessorConfig::default()
来创建,然后通过 nums_workers
方法来修改 num_workers
字段。