Trait概览
接口抽象 or 特设多态
接口抽象:对不同类型统一实现 + trait将各种接口定义场景考虑进去
trait 作为对不同数据结构中相同行为的一种抽象。
- 延迟实现: 除了基本 trait 之外,当行为和具体的数据关联时,比如字符串解析时定义的 Parse trait,我们引入了带有关联类型的 trait,把和行为有关的数据类型的定义,进一步延迟到 trait 实现的时候。
- 对于同一个类型的同一个 trait 行为,可以有不同的实现,比如我们之前大量使用的 From,此时可以用泛型 trait。可以说 Rust 的 trait 就像一把瑞士军刀,把需要定义接口的各种场景都考虑进去了。
对不同类型的不同实现: 特设多态
特设多态是同一种行为的不同实现。所以其实,通过定义 trait 以及为不同的类型实现这个 trait,我们就已经实现了特设多态。
- Add trait 就是一个典型的特设多态,同样是加法操作,根据操作数据的不同进行不同的处理。
- Service trait 是一个不那么明显的特设多态,同样是 Web 请求,对于不同的 URL,我们使用不同的代码去处理。