在这种情况下,单例GUI是否会很好?

时间:2009-08-08 18:36:03

标签: java user-interface singleton

我正在开发一个项目,我有很多类引用我的GUI(主要是面板,但有时候是框架本身)。所以我在考虑不是将框架作为参数传递给每个构造函数并在每个类中创建getter,而是创建JFrame的单例实例,以便所有类都可以访问它。这是一个好方法还是会以某种方式惩罚我的懒惰?

编辑:我不只是懒惰,我试图在这里考虑模型:例如,假设我有各种Car对象,而Road就是我的GUI。所有汽车都应该可以进入同一条道路,而道路不是汽车的一部分。

3 个答案:

答案 0 :(得分:2)

该地区有很多意见,请参阅下面的参考资料。

我的感觉是我们应该尽量避免单身人士因为“没有这样的数字1”。

[这源于我的理论“没有这样的数字2”。如果你有代码,允许两个东西,只有两个东西,那么你错过了一个技巧 - 几乎肯定会超过两个,而是解决如何处理“很多”。]

“没有这样的数字作为一个参数”就是当你认为只有一个东西会有一些上下文可以有更多......并且通常很少额外的工作来允许更多。

看看你的例子......我有各种各样的Car对象,他们都可以访问同一条道路吗?这听起来像是现实世界的典范吗?英国道路和法国道路有什么区别? ;-)为什么要在代码中构建“Only One”假设?

使用工厂和依赖注入这些工厂往往是更好的答案。在question的答案中有更多材料。

答案 1 :(得分:2)

今天,Singleton模式被认为是一种“反模式”。当您的汽车需要在不同的道路上使用一天时,问题就会变得明显。

如果你决定自己对汽车进行单元测试,那将会更加明显。如果你不能为道路提供模拟,你将如何测试它们?而且你将无法,因为他们通过单身人士引用他们的道路。

(显然,在“测试模式”下让Singleton返回MockRoad有一种解决方法,但这只是意味着你要在生产代码中添加测试代码。)

答案 2 :(得分:1)

更好的方法是隐藏静态方法背后的主JFrame,但总的来说,如果整个程序只有一个JFrame对象,那么最好将它设置为静态。

将它隐藏在静态方法之后可以确保如果你与其他任何人一起工作,你可以限制你希望他们能够在主JFrame上访问的内容,但是对于像学校项目等的东西来说是无用的。