// 定义泛型结构体
struct Container<T> {
data: T,
}
// 定义Processor trait
trait Processor {
fn process(&self) -> i32;
}
// 针对Container<i32>实现Processor trait
impl Processor for Container<i32> {
fn process(&self) -> i32 {
self.data * self.data
}
}
// 针对Container<String>实现Processor trait
impl Processor for Container<String> {
fn process(&self) -> i32 {
self.data.len() as i32 * 2
}
}
实际应用中这种设计的优势:
- 代码复用:通过泛型和trait,可以在不同的数据类型上复用相同的处理逻辑框架。例如,这里定义一次
Processor
trait,就可以为不同的Container<T>
类型实现具体的处理方法,减少重复代码。
- 扩展性:如果后续需要为新的数据类型添加处理逻辑,只需为该数据类型实现
Processor
trait即可,而不需要修改原有代码。例如,未来新增Container<f32>
,只需单独为其实现Processor
trait。
- 抽象性:这种设计将处理逻辑抽象出来,使用者只需要关心
Processor
接口提供的功能,而不需要了解具体数据类型的处理细节。例如,调用者无需知道Container<i32>
和Container<String>
的process
方法具体是如何实现的,只需要知道它们都能通过process
方法进行特定处理。