Rust 不支持继承,这对从 Java 转过来的人有点困扰。近日在读设计模式的书籍,里面有个例子是:有一个抽象的 Duck 类,它有一个属性是 FlyBehavior (是个接口)。
abstract class Duck {
private FlyBehavior flyBehavior;
public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; }
public FlyBehavior getFlyBehavior() { return this.flyBehavior; }
}
再 Rust 里面,只能这样写:
trait Duck {
fn get_fly_behavior(&self) -> &dyn FlyBehavior;
fn set_fly_behavior(&mut self, fly_behavior: Box<dyn FlyBehavior>);
}
这样的话,所有实现 Duck 的其他 struct 都必须写 一模一样 的 getter/setter 。
所以,在 Rust 中针对这个场景,如何能够实现代码复用?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.