trait Draw {
fn draw(&self);
}
struct Circle {
radius: f64,
}
impl Draw for Circle {
fn draw(&self) {
println!("Drawing a circle with radius {}", self.radius);
}
}
struct Rectangle {
width: f64,
height: f64,
}
impl Draw for Rectangle {
fn draw(&self) {
println!("Drawing a rectangle with width {} and height {}", self.width, self.height);
}
}
fn draw(shape: &impl Draw) {
shape.draw();
}
函数重载相较于其他实现方式的优势
- 代码清晰易读:使用函数重载(通过trait实现类似函数重载效果),对于不同图形的绘制逻辑都封装在各自的
impl Draw
块中,代码结构清晰,易于理解和维护。
- 扩展性强:当需要添加新的图形类型时,只需要实现
Draw
trait即可,无需修改现有的绘制函数draw
,符合开闭原则。
- 类型安全:Rust的trait系统确保了传入
draw
函数的参数必须实现Draw
trait,提供了编译期的类型检查,减少运行时错误。