![Прототип](/images/patterns/cards/prototype-mini.png?id=bc3046bb39ff36574c08d49839fd1c8e)
Прототип на Rust
Прототип — це породжуючий патерн, який дозволяє копіювати об’єкти будь-якої складності без прив’язки до їхніх конкретних класів.
Усі класи-Прототипи мають спільний інтерфейс. Тому ви можете копіювати об’єкти, не звертаючи уваги на їхні конкретні типи та бути завжди впевненими в тому, що отримаєте точну копію. Клонування здійснюється самим об’єктом-прототипу, що дозволяє йому скопіювати значення всіх полів, навіть приватних.
Built-in Clone trait
Rust has a built-in std::clone::Clone
trait with many implementations for various types (via #[derive(Clone)]
). Thus, the Prototype pattern is ready to use out of the box.
main.rs
#[derive(Clone)]
struct Circle {
pub x: u32,
pub y: u32,
pub radius: u32,
}
fn main() {
let circle1 = Circle {
x: 10,
y: 15,
radius: 10,
};
// Prototype in action.
let mut circle2 = circle1.clone();
circle2.radius = 77;
println!("Circle 1: {}, {}, {}", circle1.x, circle1.y, circle1.radius);
println!("Circle 2: {}, {}, {}", circle2.x, circle2.y, circle2.radius);
}
Output
Circle 1: 10, 15, 10 Circle 2: 10, 15, 77