我应该使用单例进行程序状态吗?

时间:2016-12-09 03:31:43

标签: java design-patterns javafx singleton

我读过this SO article,它告诉我们单身人士非常邪恶,应该像流行病一样避免。它还告诉我们,单身就像一个“全球”。

这让我想知道我是否真的需要一些像程序运行时状态的东西,单身是个坏主意吗?

例如,我有一个可以产生许多窗口的JavaFX应用程序。每个窗口至少有两个样式表 - 一个用于控制布局(如对齐等),另一个用于主题。

主题样式表可以在运行时切换到另一个主题样式表,它应该全局影响在该实例打开的所有窗口。对我来说,创建一个具有ObservableList样式表的单例类是有意义的,所有窗口都可以将Scene的样式表属性绑定到。

真的是个坏主意吗?如果它影响测试,完全如何影响测试?我理解每个窗口应该彼此独立地进行测试,但实际的行为是所有这些窗口都假设看起来主题相同。此外,我认为它不应该影响每个窗口应该真正相互独立的其他区域。

如果这真的很糟糕,在上面的例子中应该采用什么方法来实现相同的结果?

1 个答案:

答案 0 :(得分:4)

实际上,使用依赖注入可以获得相同的行为。

在应用程序的主线中,您将实例化一个类UIContext,每当您打开一个新窗口时,您都会将UIContext实例赋予其构造函数。

所有窗口共享相同的UIContext实例,但它不是单例,只是您已将整个UIContext注入到许多其他依赖类中。

也就是说,如果您需要实施测试,您可以毫无困难地向窗口提供样本/假UIContext