知识卡片

原子成分加合成方式让新增计算和新增对象互不牵连

普通读书笔记卡 · 1815.a

内容

把一个复杂对象(布丁、金融契约)表示成少量原子成分加上一组合成方式递归组合出来的树,比针对每种具体对象单独写描述要好得多:针对整个类别定义的计算(如求总糖量)可以写成沿着合成方式结构递归下降的统一函数,新增一种成分或合成方式只需给这个函数加一条新分支,已有代码完全不用碰;反过来,只要成分和合成方式的集合不变,无论定义多少种新的具体对象都不需要为计算函数增加任何代码。

参考来源

- 位置:《架构之美》第13章《软件架构:面向对象与面向函数》13.2节《函数式示例》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0256.xhtml) - 结论依据:原文以布丁糖量计算的递归函数S为例明确指出"只有当我们需要添加新的合成方式或者新的成分时,才需要增强S。当定义一个新的食谱时,如果要完成糖量的计算,无需任何其他工作"。 - 原始内容:定义一个小型的"布丁合成方法"集。用这些合成方法定义所有布丁。糖量的计算也从这些合成方法中得出……只有当我们需要添加新的合成方式或者新的成分时,才需要增强S。当定义一个新的食谱时,如果要完成糖量的计算,无需任何其他工作。