java - 工厂模式不遵循 OPEN CLOSE 原则

标签 java design-patterns

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

假设需要实现产品工厂,需要一个Product接口(interface),所有具体类如AProductBProduct和< strong>CProduct 将实现产品接口(interface)。

Public Static Product createProduct(String prdName);

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

现在,如果引入了DProduct新产品,那么我们需要更改createProduct方法,因此这种模式不遵循OPEN CLOSE原则

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

我可以应用任何其他模式来解决我的问题吗?

最佳答案

if a new product say DProduct is introduced then we need to make changes to createProduct method

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

诀窍是让你的工厂可配置:你可以构建一个类的“注册表”,将传递到工厂的键映射到类的名称,并使用反射 API 实例化方法需要返回的类。

关于java - 工厂模式不遵循 OPEN CLOSE 原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18222168/

相关文章:

java - 为什么无限循环在加载数据时 hibernate

java - 在 Hibernate 5、Tomcat 8 中配置数据源

java - 从具有多个线程的 SQS 队列中读取

java - 仅仅为了分层结构而拥有抽象类是否有意义?

java - 实例化其子类将取决于用户输入的对象

asp.net-core - 数据库中的本地化实体

java - 实例化使用 <Foo extends Bar<Foo>> 的通用对象

java - 我可以在自己的注释上使用 Spring Security @PreAuthorize 吗?

jquery - 前端代码的 BDD?

javascript - 了解 JS 模块模式的工作原理