java - 为什么我需要 FactorySupplier?

标签 java design-patterns factory factory-pattern

在我做的项目中(不是我的项目,只是在做),有很多这样的结构:

project.priv.logic.MyServiceImpl.java
project.priv.service.MyServiceFactoryImpl.java

project.pub.logic.MyServiceIF.java
project.pub.service.MyServiceFactoryIF.java
project.pub.service.MyServiceFactorySupplier.java

服务是这样调用的:

MyServiceFactorySupplier.getMyServiceFactory().getMyService()

我了解到,如果 MyServiceImpl 的位置或内容发生变化,工厂用于隐藏 MyServiceImpl 的实现。但是为什么我的工厂(供应商)有另一个工厂?我认为我的 Factory 和我的 FactorySupplier 发生变化的概率大致相等。此外,我还没有发现创建的工厂是动态创建的(我认为在抽象工厂模式中就是这种情况)但只返回 MyServiceFactoryImpl.getInstance() 的情况。实现 FactorySupplier 是常见的做法吗?有什么好处?

最佳答案

我可以想到几个示例(其中一些非常人为设计),在这些示例中此模式可能很有用。通常,您的服务有两个或更多实现,例如

  • 一个用于生产/一个用于测试
  • 一种用于服务访问数据库的实现,另一种实现用于访问文件库
  • 不同地区的不同实现(翻译、日期和数字的格式等)
  • 针对您要访问的每种类型的数据库的一个实现

在每个示例中,都需要在应用程序启动时对您的 FactorySupplier 进行初始化,例如FactorySupplier 使用语言环境或数据库类型进行参数化,并根据这些参数生成相应的工厂。

如果我没理解错的话,你的应用程序中没有任何类型的代码,FactorySupplier 总是返回相同类型的工厂。

也许这样做是为了实现尚不需要的可扩展性,但恕我直言,这看起来更像是在猜测应用程序在未来某个时间可能需要什么,而不是有意识的架构选择。

关于java - 为什么我需要 FactorySupplier?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142430/

相关文章:

java - 缓冲阅读器读取特定行和文本

java - 这个 Java 枚举的使用/设计是否正确?

java - 单独的代码层来处理 C#/Java 中的事件

java - 如何动态生成bean列表

java - 如何将给定时间(如日期字符串)转换为 13 位时间戳

java - Java 数组是类实例吗?

java - 返回 Builder 的工厂方法不使用泛型进行编译。怎么了?

c++ - 我可以在 C++ 工厂中声明的同一行中使用变量吗?

Java序列化: static variables not serializable: workaround

c# - 关于何时保存的设计问题