知识卡片

产品族扩展困难是抽象工厂的核心代价

普通读书笔记卡 · 1854.a.1.b

内容

[[抽象工厂模式的定义是工厂方法的升级版]]最大缺点是新增产品族困难:新增产品族C,抽象类要 新增createProductC方法,所有已有具体工厂都要跟着改,严重违反开闭原则,这种代码被称为 “有毒代码”。发散:产品族维度横切在所有工厂类里,任何增减都是对所有工厂的同时冲击,与 产品等级”新增一个工厂类即可”的低成本扩展形成对比。

参考来源

- 位置:《设计模式之禅(第2版)》第9章《抽象工厂模式》(源文件:_epub-src/text/part0040.html) - 结论依据:原文以新增产品C为例,说明抽象类AbstractCreator要新增方法、两个实现类都要修改,"这严重违反了开闭原则……那么这段代码叫什么?叫'有毒代码'——只要与这段代码有关系,就可能产生侵害的危险!" - 原始内容:抽象工厂模式的最大缺点就是产品族扩展非常困难……抽象类AbstractCreator要增加一个方法createProductC(),然后两个实现类都要修改……这严重违反了开闭原则,而且我们一直说明抽象类和接口是一个契约。改变契约,所有与契约有关系的代码都要修改。