在java中实现工厂模式时
假设需要实施产品工厂,需要产品界面,所有具体类别如产品, BProduct 和< strong> CProduct 将实现产品界面。
公共静态产品 createProduct (String prdName);
工厂方法的签名如上所示。
现在,如果引入新产品 DProduct ,我们需要对createProduct方法进行更改,因此此模式不遵循 OPEN CLOSE Principle 。
(开放式原则是您的代码应该是开放的扩展名并且关闭以进行修改。)
我可以对此应用任何其他模式,这将解决我的问题。
答案 0 :(得分:5)
如果引入了新产品
DProduct
,那么我们需要对createProduct方法进行更改
不,或者至少不一定:考虑java.sql.DriverManager
类作为反例。它的getConnection(String url)
显然是一种工厂方法,但它可以轻松处理新驱动程序的添加,而不会对方法本身进行任何更改。
诀窍是让您的工厂可配置:您可以构建一个映射密钥的类的“注册表”,而不是对一堆if
- then
- else
进行硬编码。传递到工厂的类的名称,并使用反射API来实例化您的方法需要返回的类。