在我做的项目中(不是我的项目,只是在做),有很多这样的结构:
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/