抽象的工厂设计模式是否违反了开/关原则



假设我们想要创建按钮和文本区域。

我们可以为Windows或Mac创建它们。

据我所知;开关";或";如果";语句,一个用于选择期望的工厂,一个用来选择期望的产品。

但如果我想加上";Linux";工厂和";文本字段";产品,我应该编辑代码并将第三个选项添加到";如果";或";开关";声明?

这不是违反了开/关原则吗?

抽象工厂中没有switchif语句;然而,关于工厂模式存在大量错误信息,因此误解很常见。抽象工厂和工厂设计模式之间有什么区别?可能在这方面有所帮助。

尽管如此,抽象工厂模式仍然容易违反OCP,因为正如您所指出的,没有明显的方法来添加新产品。GoF的书确实解决了这一限制,并提供了一个潜在的解决方案。参见:是否存在";更多";抽象工厂模式的真实世界示例?

最新更新