扩展单例类错了吗?

时间:2012-03-26 17:26:21

标签: design-patterns logging singleton extending

我正在为应用程序创建一个记录器。我正在使用第三方记录器库。在哪个记录器中实现为单例。

我扩展了logger类,因为我想添加一些静态函数。在这些静态函数中,我在内部使用Logger的实例(单个)(我继承了)。

我既没有创建MyLogger的实例,也没有重新实现超类的getInstance()方法。 但我仍然得到像MyLogger的析构函数一样的警告,因为无法访问父类(Loggger)析构函数。

我想知道, 我做错了什么? 继承单身是错的还是应该避免?

4 个答案:

答案 0 :(得分:4)

将单例模式的优点放在一边(有一种思想将它描述为反模式)子类它不需要简单地添加 static 功能。以下是特定于语言的方法,我更喜欢对单例进行子类化:

  • 使用C ++命名空间中的独立函数
  • 在C#
  • 中使用扩展程序
  • 在Java中使用帮助程序类
  • 在Objective-C中使用类别

答案 1 :(得分:0)

我会使用非单例并在需要时将调用委托给单例。只要你有机会摆脱单身人士,就去吧。

答案 2 :(得分:0)

我同意Garret Hall的意见,如果可能的话,你应该避免使用Singleton。也就是说,出于某种原因,我认为这不是错误的。实现Singleton的人可以让你扩展它。如果api开发人员不希望扩展单例类Logger,那么他们就会将构造函数设置为私有,例如C ++,或者适合您所使用语言的任何方法。

答案 3 :(得分:0)

我认为在类上编写包装器不是正确的解决方案,因为你需要为singleton所需的每个方法编写包装器。最后你写了几十个函数。

此外,您还限制自己使用单身中的所有可用功能。

不是一个好的想法!!!