一个类的'singleton-ness'是如何使用类的一个重要方面。但是,它通常在类的公开API中没有任何明确的状态。是的,经常使用传统的方法名称,例如getInstance(),但这并不是我在这里提到的。
'tag interface'是一个不包含任何方法或数据的接口。标记接口的示例是Serializable。
为单身人士定义标签界面是否有用?这会:
这是一个简单的想法,但我从未见过它在任何地方提到过。
答案 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注释来标记单子。 :)