工厂模式不遵循OPEN CLOSE原则

时间:2013-08-14 02:13:59

标签: java design-patterns

在java中实现工厂模式时

假设需要实施产品工厂,需要产品界面,所有具体类别如产品 BProduct 和< strong> CProduct 将实现产品界面。

  

公共静态产品 createProduct (String prdName);

工厂方法的签名如上所示。

现在,如果引入新产品 DProduct ,我们需要对createProduct方法进行更改,因此此模式不遵循 OPEN CLOSE Principle

(开放式原则是您的代码应该是开放的扩展名并且关闭以进行修改。)

我可以对此应用任何其他模式,这将解决我的问题。

1 个答案:

答案 0 :(得分:5)

  

如果引入了新产品DProduct,那么我们需要对createProduct方法进行更改

不,或者至少不一定:考虑java.sql.DriverManager类作为反例。它的getConnection(String url)显然是一种工厂方法,但它可以轻松处理新驱动程序的添加,而不会对方法本身进行任何更改。

诀窍是让您的工厂可配置:您可以构建一个映射密钥的类的“注册表”,而不是对一堆if - then - else进行硬编码。传递到工厂的类的名称,并使用反射API来实例化您的方法需要返回的类。