2

当我们在java中实现工厂模式时

假设需要实现产品的工厂,需要一个产品接口,所有的具体类如AProductBProductCProduct都将实现产品接口。

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

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

现在如果一个新产品说引入了DProduct那么我们需要对 createProduct 方法进行更改,所以这个模式不遵循OPEN CLOSE 原则

(开闭原则是你的代码应该对扩展开放,对修改关闭。)

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

4

1 回答 1

5

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

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

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

于 2013-08-14T02:20:45.263 回答