考虑一个假设的应用程序:
问题: 假设由于某种原因,使用像Factory,Builder,Creator等工厂设计模式的运行无法实现上述问题:
new
)答案 0 :(得分:1)
在您描述的抽象层次上,这听起来像是一个合理的解决方案,并且有助于一些好的设计模式(如松散耦合和实例不变性)。据我所知,Guice不会对任何可比较的解决方案造成更大的内存泄漏或其他性能问题的威胁 - 只需关注您保留哪些引用,以便GC能够完成其工作。
为此,您可能需要注意在Guice中创建单例对象,但是,如果您依赖它们进行垃圾回收。只要Injector可以访问,声明为@Singleton
(或asEagerSingleton
或toInstance
)的对象就不能被垃圾收集,因为Injector有义务返回完全相同的实例再次问道。在桌面虚拟机中,获取无状态对象的多个实例可能更便宜,因此GC可以全部收集它们,而不是将对象声明为永远无法收集的单例。