知识卡片

动态绑定把类型分支判断从客户代码中彻底移除

普通读书笔记卡 · 1815.h

内容

如果客户代码要根据对象的具体子类型分别写不同分支处理(水果沙拉这样算,别的布丁那样算),那么每新增一种子类型,所有写过这种分支判断的客户代码都要跟着改一遍,改动会随子类型数量和客户代码数量成倍放大。动态绑定把该用哪个具体版本这个决策从客户代码里完全移除,客户只管调用同一个方法名,运行时自动按对象的实际类型分派到正确实现,新增子类型时已有客户代码不需要任何改动。

参考来源

- 位置:《架构之美》第13章《软件架构:面向对象与面向函数》13.5.2节《可扩展性:添加类型》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0269.xhtml) - 结论依据:原文明确"面向对象方法的好处在于当客户类执行某个操作时,无需进行多路分支判断……这样的判断必须在每种操作中不断重复……动态绑定解决了这个问题;客户应用程序只需调用my_contract.value,内建的机制就将自动选择出相应的版本"。 - 原始内容:动态绑定在此又起关键作用……这样的判断必须在每种操作中不断重复,更坏的是当添加或修改某种类型时,我们需要分别针对每个客户、每个操作进行相应的更新……动态绑定解决了这个问题;客户应用程序只需调用my_contract.value,内建的机制就将自动选择出相应的版本,客户无需知道它们之间的不同。