Какова наилучшая практика для внедрения Singletons в Perl?Как я могу реализовать одноэлементный класс в perl?
ответ
Вы можете использовать модуль 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;
}
Это не удается, если модуль подклассифицирован; переменная экземпляра должна жить в последнем пакете. Класс :: Singleton получает это право. –
Это действительно не «сбой», если он унаследован. Унаследованный класс просто должен получить доступ и взаимодействовать с объектом singleton, как и любой другой класс. Однако все зависит от того, что вы пытаетесь сделать. –
Если вы используете Moose, то MooseX::Singleton. Его интерфейс совместим с Class :: Singleton.
Singleton Резюме:
- Большую часть времени нормальный объект будет работать.
- Будьте осторожны с одиночными играми.
- Локализуйте взаимодействие как можно больше
Хотя одиночки являются хорошей идеей, я, как правило, просто реализовать нормальный объект и использовать его. Если критически важно, чтобы у меня был только один такой объект, я модифицирую конструктор, чтобы вызвать фатальное исключение, когда создается второй объект. Различные модули singleton, похоже, не делают ничего, кроме добавления зависимости.
Я делаю это, потому что это легко, это работает, и когда в каком-то странном будущем мне нужно работать со вторым объектом в моем приложении, изменения сводятся к минимуму.
Мне также нравится локализовать взаимодействие с моими объектами «singleton» - поддерживать взаимодействие как можно меньше мест. Поэтому вместо каждого объекта, имеющего прямой доступ к синглтону, я посредничаю во всем взаимодействии через свой объект «Приложение». Когда это возможно, объект приложения получает данные из «singleton» и передает его в качестве параметра методу в других объектах. Ответы других объектов также могут быть отброшены и переданы в «singleton». Все это помогает, когда мне нужно внести изменения в объект «singleton», и когда я хочу повторно использовать другие объекты в другом приложении, которые могут не понадобиться или быть в состоянии использовать оригинальный объект «singleton».
Я думаю, что вам не хватает точки синглтона. Это шаблон, который вы можете использовать, поэтому вам не нужно делать все сложное посредничество. Вам не обязательно использовать его, но не обесценивайте его просто потому, что он вам не нужен. Не все вписывается в схему, которую вы описали. –
- 1. Как я могу реализовать абстрактный одноэлементный класс в Java?
- 2. Могу ли я реализовать одноэлементный шаблон?
- 3. Как создать одноэлементный класс
- 4. Как реализовать одноэлементный шаблон в android
- 5. Как я могу реализовать класс, используя: Интерфейс?
- 6. Как тестировать (TDD) одноэлементный класс?
- 7. Как сохранить/загрузить одноэлементный класс
- 8. Как сделать одноэлементный класс потокобезопасным?
- 9. Могу ли я сделать NSManagedObject в одноэлементный?
- 10. Как настроить одноэлементный класс в качестве делегата?
- 11. расширяет одноэлементный класс в PHP
- 12. Как создать одноэлементный класс с использованием enum
- 13. Как я могу реализовать простой клиент IRC в Perl?
- 14. В Perl, как я могу реализовать карту, используя grep?
- 15. Как я могу реализовать параллельный процесс в perl?
- 16. Как обернуть одноэлементный класс с помощью pybind11?
- 17. статический одноэлементный класс становится нулевым
- 18. Почему одноэлементный класс трудно тестировать?
- 19. Как я могу реализовать этот класс в моей mainActivity
- 20. Как я могу реализовать класс BigInteger в своем коде?
- 21. Я создал одноэлементный класс, как я могу его назвать из своих ViewControllers?
- 22. Должен ли я превратить свой класс SQLite в одноэлементный?
- 23. JavaScript - Что такое одноэлементный класс?
- 24. Как я могу реализовать веб-службы на Perl?
- 25. Как сделать класс оболочки Log4Net как одноэлементный класс?
- 26. Класс связи с базой данных как одноэлементный
- 27. Как я могу реализовать класс, который знает TransactionScope?
- 28. Как я могу реализовать Связанный список и другой класс
- 29. Как я могу реализовать класс, который расширяет активность во фрагменте?
- 30. Как я могу реализовать класс для реализации интерфейса .... (C++)
Лучшая практика для внедрения синглтонов - это ** Не надо! ** –
@gbacon - какова была бы причина для внедрения сиглетонов? Конечно, я никогда не использовал их широко (или, скорее, почти никогда), но я не знаю ни одной причины, чтобы избежать их, а не просто не обязательно их нуждаться. – DVK
@DVK Синглтон - это глобальная переменная, носящая причудливый костюм. –