// Shape结构体定义
trait Shape {
fn render(&self);
}
// 圆形结构体
struct Circle {
radius: f64,
}
impl Shape for Circle {
fn render(&self) {
println!("Rendering a circle with radius: {}", self.radius);
}
}
// 矩形结构体
struct Rectangle {
width: f64,
height: f64,
}
impl Shape for Rectangle {
fn render(&self) {
println!("Rendering a rectangle with width: {} and height: {}", self.width, self.height);
}
}
// render_scene函数
fn render_scene(shapes: &[&dyn Shape]) {
for shape in shapes {
shape.render();
}
}
可扩展性优势
- 新增图形容易:如果要新增一种图形,比如三角形,只需要定义一个
Triangle
结构体,并实现 Shape
trait 中的 render
方法即可。无需修改现有的 render_scene
函数和其他图形的实现代码。
- 易于添加新功能:可以在
Shape
trait 中添加新的方法,所有实现了该 trait 的图形结构体都会自动拥有这个新功能。
维护性优势
- 单一职责:每个图形的渲染逻辑都封装在自己的结构体和对应的
render
实现中,使得代码的职责清晰,易于理解和修改。
- 代码复用:
render_scene
函数不关心具体的图形类型,只需要知道这些图形都实现了 Shape
trait,从而实现了对不同图形渲染的统一处理,减少了重复代码。