Rust语言之GoF设计模式:原型模式


原型模式:一种创建模式,允许您复制现有对象而不依赖于它们的类型。
原型Prototype允许克隆对象,甚至是复杂的对象,而无需耦合到它们的特定类。

Rust 有许多类型的标准Clone实现(通过#[derive(Clone)]),这使得Prototype 易于使用且无缝。

#[derive(Clone)]
struct Rectangle {
    width, height: u32,
}

let rectangle1 = Rectangle::new(10, 20);
let mut rectangle2 = rectangle1.clone();
rectangle2.set_width(50);

谈到克隆或原型模式,一个绕不开的话题是:按值传递与按引用传递。
但在大多数语言中,变量不能直接持有对象/结构,创建它们的唯一方法是在堆上通过指针。这意味着对于大多数复杂的类型,你是在传递引用而不是复制它们。

因此,Rust的最大区别在于它允许你直接在堆栈中创建结构,并通过复制来传递它们。
它还引入了一个新的移动值的概念(本质上只是一个拷贝,但确保原始值不再被使用)。
rusts思维方式的一大好处是:从来不用担心过深度克隆与浅层克隆的问题。
而且你基本上可以在需要的地方建立所有的深/浅克隆类型(比如当你明确希望事物被浅层复制时,使用引用或Arc/Rc)。

在Rust中,所有的东西都是通过值传递的,但是你仍然可以显式地做一个引用并传递引用,这本质上就是通过引用传递。引用本身是通过值传递的,但被传递的值只是对其他东西的引用。

参考:Rust智能指针