如何在perl中实现单例类?

时间:2010-02-22 10:47:35

标签: perl singleton

在Perl中实现Singletons的最佳做法是什么?

3 个答案:

答案 0 :(得分:16)

您可以使用Class::Singleton模块。

使用mystate变量也可轻松实现“Singleton”类(后者自Perl 5.10起可用)。但请参阅下面的@ Michael的评论。

package MySingletonClass;
use strict;
use warnings;
use feature 'state';

sub new {
    my ($class) = @_;
    state $instance;

    if (! defined $instance) {
        $instance = bless {}, $class;
    }
    return $instance;
}

答案 1 :(得分:9)

如果你正在使用Moose,那么MooseX::Singleton。它的接口与Class :: Singleton兼容。

答案 2 :(得分:2)

Singleton摘要:

  • 大部分时间普通对象都可以使用。
  • 小心单身。
  • 尽可能本地化互动

虽然单身人士是一个好主意,但我倾向于只实现一个普通的对象并使用它。如果关键是我只有一个这样的对象,我将修改构造函数以在创建第二个对象时抛出致命异常。除了添加依赖项之外,各种单例模块似乎没有做太多。

我之所以这样做是因为它很容易,它有效,而且在某些奇怪的未来,我需要在我的应用程序中使用第二个对象,这些更改会被最小化。

我也喜欢本地化与我的“单身”对象的互动 - 在尽可能少的地方保持互动。因此,不是每个对象都可以直接访问单例,而是通过我的“应用程序”对象调解所有交互。应用程序对象尽可能从“singleton”获取数据,并将其作为参数传递给其他对象中的方法。来自其他对象的响应也可能被传播并传递给“单身人士”。当我需要在'singleton'对象中进行更改时,以及当我想在另一个可能不需要或无法使用原始'singleton'对象的app中重用其他对象时,所有这些努力都会有所帮助。