为什么我需要FactorySupplier?

Jay*_*Kay 6 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
Run Code Online (Sandbox Code Playgroud)

服务的调用方式如下:

MyServiceFactorySupplier.getMyServiceFactory().getMyService()
Run Code Online (Sandbox Code Playgroud)

据我所知,工厂用于隐藏更改MyServiceImpl位置或内容的实现MyServiceImpl.但为什么我的工厂(供应商)还有另一家工厂?我认为我的Factory和FactorySupplier改变的概率大致相等.另外我还没有找到一个案例,其中创建的工厂是动态创建的(我认为这将是抽象工厂模式中的情况)但只返回MyServiceFactoryImpl.getInstance().通常的做法是实施FactorySupplier吗?有什么好处?

Ral*_*ner 1

我可以想到几个示例(其中一些非常人为的),其中该模式可能有用。一般来说,您的服务有两个或多个实现,例如

  • 一份用于生产使用/一份用于测试
  • 一种用于访问数据库的服务实现,另一种用于访问文件基础存储
  • 不同语言环境的不同实现(翻译、日期和数字的格式等)
  • 您要访问的每种类型的数据库都有一个实现

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

如果我理解正确,那么您的应用程序中没有任何类型的此代码,并且FactorySupplier始终返回相同类型的工厂。

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