繁体   English   中英

我们应该密封单身人士吗?我们应该首先尝试从单身人士继承吗?

[英]Should we seal Singletons? Should we try to inherit from Singletons in the first place?

Singleton课程应该允许生孩子吗? 我们应该密封吗? 优缺点都有什么?

为了能够从Singleton类继承,我们必须使构造函数受保护而不是私有。 现在,这在c#中会很好,但java中受保护的单词给了子类和包类访问构造函数。 这意味着不仅从我们的Singleton继承的类可以访问构造函数,而且同一个包中的其他类也可以这样做。

我对这些事实感到有些困惑。 也许我正在做一件大惊小怪的事情,不用太担心? 到现在为止,我从来没有必要尝试继承单身人士,所以也许这只是一个学术问题!

谢谢

更好的解决方案是使用IoC容器框架来处理类的“Singleton”(生命周期)方面。 此时,您可以使用POJO并简单地继承它。

编辑:一些可能有帮助的链接:

寻找那些处理终身管理的人。 您希望能够配置容器(其作用类似于通用工厂),以便对“Singleton”类的实例的请求始终返回相同的实例(至少对于同一容器)。 通常,只有一个容器实例位于应用程序的最高级别。

是的,单身人士应该密封。 不,他们不应该继承。

其原因是,一个Singleton的初级(实际上 )的行为是在某个预定的时间来创建自己的一个实例。 由于此功能是静态的,因此无法覆盖,因此必须重复此功能。 一旦你开始复制,你有一个单例的多个实例,这没有多大意义。

无论是那种,你最终都会遇到竞争条件或其他冲突,因为“派生”的单身人士争夺对全球实例的控制权,这不仅没有意义,而且是危险的。

Singleton继承问题有一些破解性的解决方法,但这就是它们 - 黑客。 Singleton模式不适合继承。

嗯,这听起来像是我们很多人在学习单身人士时被问到的问题。 我建议阅读以下链接。

http://msmvps.com/blogs/jon_skeet/archive/2006/01/20/singleton-inheritance.aspx http://msdn.microsoft.com/en-us/library/84eaw35x.aspx

许多人强烈反对继承单身人士,但现实生活中的编程往往需要这种方法。 我个人会说,不要继承单身作为经验法则,但不要将自己锁定在阻止这种方法的设计中。 务实的开发方法始终是最好的方法......

如果您可以从单例扩展,那么这意味着您可以拥有多个实例。 这与整个单身人士的想法相矛盾。 只需使它成为一个“普通”类并相应地编写代码,只需将它实例化一次并永远使用相同的实例。 如果你需要它。 依赖注入可以帮助很多。

如果要将继承与单例模式结合使用,则应将可继承的状态和行为放入抽象基类中,并将单例定义为(最终)子类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM