面向对象的特征:命名对象、封装、继承
介绍
Rust 是面向对象的:
避免将 struct
、enum
包含数据、impl
块提供方法称为对象,因为它们是分开的
Rust 中 trait 称为对象,因为它们某种程度上组合了数据与行为,但无法为 trait 对象添加数据
封装:调用对象外部的代码无法直接访问对象内部的实现细节,唯一可以与对象进行交互的方法就是通过它的公开(pub) API
继承:使对象可以沿用另外一个对象的数据和行为,且无需重复定义相关代码
Rust 没有继承(现在很多新语言都不实用继承作为内置程序设计)
- Rust 默认使用 Trait 方法来进行代码共享
- 为共有行为定义一个 trait
- 其中,使用 Trait 对象执行时是
动态派发(dynamic dispatch)
的 - Rust 对象必须保证对象安全(object-safe),规则如下:
- 方法的返回值类型不是 &self
- 方法不包含任何泛型类型参数
多态:Rust 泛型和 trait 约束限定参数化多态(bounded parametric)
状态模式
状态模式(state pattern)
是一种面向对象设计模式:一个值拥有的内部状态由数个状态对象(state object)表达而成,而值的行为则随着内部状态的改变而改变
状态模式的缺点: