利用鸭子类型降低成本:原理、实践与权衡
1. 多态与鸭子类型基础
多态意味着一个消息可以有多种形式,接收者会提供其特定版本的行为。实现多态有多种方式,鸭子类型便是其中之一。多态方法遵循一种隐式约定,从消息发送者的角度来看,实现多态方法的对象可以相互替换,发送者无需关心这种替换。不过,这种可替换性并非自然形成,使用多态时,需要确保所有对象都表现良好。
2. 编写依赖鸭子类型的代码
2.1 识别隐藏的鸭子类型
在现有代码中,常常存在未被识别的鸭子类型。以下几种常见的编码模式暗示了隐藏鸭子类型的存在:
- 基于类的 case 语句 :
class Trip
def prepare(preparers)
preparers.each {|preparer|
case preparer
when Mechanic
preparer.prepare_bicycles(bicycles)
when TripCoordinator
preparer.buy_food(customers)
when Driver
preparer.gas_up(vehicle)
preparer.fill_water_tank(vehicle)
end
}
end
# ...
end
当看到这种模式时,应思考 prepare 方法对每个参数的期望
超级会员免费看
订阅专栏 解锁全文
9万+

被折叠的 条评论
为什么被折叠?



