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

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

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

我对这些事实感到有些困惑。 也许我在为太多担心而无所事事? 直到现在,我从来没有必要尝试inheritance单身人士,所以这可能只是一个学术问题!

谢谢

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

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

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

Singletoninheritance问题有一些破解性的解决方法,但这就是它们 – 黑客攻击。 Singleton模式不适合inheritance。

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

编辑:一些可能有用的链接:

  • .NETdependency injection容器列表(IOC)
  • 控件容器的开源反转(Java)
  • .NET中的dependency injection(书籍)
  • Mark Seemann的.NET博客 – dependency injection类别

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

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

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

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

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

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