单身人士的标记界面

时间:2009-08-28 23:36:42

标签: java interface singleton tags

一个类的'singleton-ness'是如何使用类的一个重要方面。但是,它通常在类的公开API中没有任何明确的状态。是的,经常使用传统的方法名称,例如getInstance(),但这并不是我在这里提到的。

'tag interface'是一个不包含任何方法或数据的接口。标记接口的示例是Serializable

为单身人士定义标签界面是否有用?这会:

  • 允许在项目的代码库中轻松识别它们
  • 更明确
  • 提供一个记录单身人士应该如何对待的地方。举一个例子,人们可以提到长寿命对象是内存泄漏的有效来源,而且单例不应该连接到短期对象。

这是一个简单的想法,但我从未见过它在任何地方提到过。

4 个答案:

答案 0 :(得分:2)

你已经在这里进行了宗教战争,但对我而言,你的想法似乎有其优点。只要有单身人士,我认为如果编译器和JVM可以强制执行原子单一性就好了。

问题是单身人士已经引起争议,因为他们很容易受到虐待。人们反对他们的使用指向秘密的全球状态,隐藏的依赖关系和大量过度使用。

当然,这些都不是Singleton-ness概念所固有的,但这并没有改变争议。

使用Serializable对你的案例没有帮助,因为汤姆指出,这本身就存在争议。当然,Serializable被一些作家认为是错误的事实并不一定如此。就个人而言,我不使用它,但不是因为我认为这本身就是一个错误...我发现有更好的方法来保持和检索更符合用户需求的状态。

当然,还有其他标记接口 - Cloneable,EventThreadListener和SingleThreadModel,如果内存服务的话。如果您将它们用作模型,则可能会更进一步。

顺便说一下,我认为大多数作家都把你称之为“标签界面”的东西称为“标记界面”。没什么大不了的,但它可能有助于您搜索关于该主题的其他想法。

答案 1 :(得分:1)

这是一个有趣的想法,但我不确定它有多有用。你的第三个要点是一个很好的观点。

更好的论据可能是“为什么单身人士?”你肯定会让Google Singleton Detector更容易找到它们并识别它们以便灭绝。他们的常见问题解答可以详尽地表达我的观点。

答案 2 :(得分:0)

为什么不使用DI / IoC容器并让它管理对象的生命周期?正如您所说,类的生命周期不需要反映在其公共接口中。

答案 3 :(得分:0)

我同意上面关于使用DI框架处理对象生命周期的TrueWill。使用Guice会给你一个Singleton注释来标记单子。 :)