曾经需要破坏单例实例吗?

cha*_*nce 13 java singleton instance destroy

通过使用单例,只能创建一个实例.我们是否需要销毁该实例?

我有一个单独的DBManager,它管理JDBC连接和查询操作.通过调用它的静态newInstance方法,我可以得到它的实例,然后我做一些查询.最后,我想关闭数据库连接,然后调用另一个静态方法来关闭JDBC连接.

现在连接已关闭,而DBManager的实例仍处于活动状态但没有用处.我需要通过例如将其分配给null来销毁它吗?否则稍后可能会被错误引用.

如果我将该实例分配为null,然后再次调用newInstance方法,我将获得另一个新的不同实例吗?

Ted*_*opp 10

我不会因为"单身"的语义而被挂起 - 你的要求就是DBManager在任何时候最多存在一个实例.一旦该实例变得无用,你可以销毁它,以便根据需要创建一个新的实例,或者定义你的newInstance方法(我可能会建议重命名getInstance)以抛出异常(也许IllegalStateException)如果在单例之后调用它变得无用了.

如果你打算在渲染无用时将其销毁,我建议这可以在单例类中自动完成,没有外界帮助.您还应该考虑完全隐藏单例DBManager并实现委派模式.这将避免客户端保持对陈旧DBManager实例的引用的问题.然后,您可以使委托对象成为常规单例.


And*_*yle 5

我认为,你不能销毁一个单身因素,因为它需要在任何时候只有一个可用的实例.并且可以说它需要是同一个实例,因为否则它不是真正的单例(例如,两个不同的类可以保存对类的不同实例的引用).

但顺便提一下,这是我认为单例模式在真实软件中几乎没有用的众多原因之一.在任何情况下,你想要完全一件事的可能性,通过阻止人们调用构造函数来强制实施这一点 - 太过僵化了.这听起来像是一种情况,在某种程度上,拥有一个单身似乎是合理的,但现在很明显,多个实例是有道理的.

那么考虑一下这是否必须是一个单例 - 你能简单地把它作为一个包装好的连接的包装器吗?