Как я могу реализовать синглтон-класс в Perl? - PullRequest
7 голосов
/ 22 февраля 2010

Какова лучшая практика для реализации Singletons в Perl?

Ответы [ 3 ]

16 голосов
/ 22 февраля 2010

Вы можете использовать модуль Class :: Singleton .

Класс "Singleton" также может быть легко реализован с помощью переменной my или state (последний доступенначиная с Perl 5.10).Но смотрите комментарий @ Майкла ниже.

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

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

    if (! defined $instance) {
        $instance = bless {}, $class;
    }
    return $instance;
}
9 голосов
/ 22 февраля 2010

Если вы используете Moose, тогда MooseX :: Singleton . Его интерфейс совместим с Class :: Singleton.

2 голосов
/ 22 февраля 2010

Синглтон Резюме:

  • Большую часть времени нормальный объект будет работать.
  • Будьте осторожны с одиночками.
  • Локализуйте взаимодействие как можно больше

Хотя синглтоны - хорошая идея, я склонен просто реализовывать обычный объект и использовать его. Если критически важно, чтобы у меня был только один такой объект, я изменю конструктор, чтобы он вызывал фатальное исключение при создании второго объекта. Различные одноэлементные модули, кажется, мало что делают, кроме добавления зависимости.

Я делаю это, потому что это легко, это работает, и когда в каком-то странном будущем мне нужно работать со вторым объектом в моем приложении, изменения минимизируются.

Мне также нравится локализовать взаимодействие с моими «одноэлементными» объектами - поддерживать взаимодействие в как можно меньшем количестве мест. Таким образом, вместо каждого объекта, имеющего прямой доступ к синглтону, я опосредую все взаимодействие через мой объект «Приложение». Когда это возможно, объект приложения получает данные из «синглтона» и передает их в качестве параметра методу в другие объекты. Ответы от других объектов могут также передаваться в «синглтон». Все эти усилия помогают, когда мне нужно внести изменения в объект «singleton», и когда я хочу повторно использовать другие объекты в другом приложении, которые могут не нуждаться или не иметь возможности использовать оригинальный объект «singleton».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...