【发布时间】:2020-08-03 06:18:04
【问题描述】:
在工厂方法中,我们必须编写 switch case 或 if 语句来决定创建和返回哪个实例。这违反了打开关闭原则,因为 - 每次添加新产品时,都必须更新工厂方法代码。
有什么方法可以使这种动态化——这样添加新产品就不需要对工厂方法进行任何更改?
例如:在 python 中,我们可以导入包含所有可用产品列表的包。工厂方法将所有可用产品及其类加载到 dict 数据结构中。因此,添加新产品时无需更改工厂代码。只需将产品添加到工厂用于导入产品类的包代码中即可。
【问题讨论】:
-
你可以......但这真的取决于你想要多少。您可以使用反射来查找从基类型派生的所有类型。并根据一些标准......比如类型名称或类型上的公共常量标识符决定激活哪一个。但是它有点重。即使它是“开闭”。我建议使用这些原则作为帮助你的工具。不是将您限制在难以阅读、理解和维护的代码中。如果你想沿着反射路径走。如果您愿意,我可以添加一个示例作为答案。
标签: c# design-patterns factory-pattern open-closed-principle