Должен ли я использовать пул объектов, одноэлементные или статические методы в многопоточной среде? - PullRequest
9 голосов
/ 01 июля 2011

У меня есть вспомогательный класс, который создает некоторые объекты, например, строитель. Вспомогательный класс не имеет состояния. Он находится в многопоточной среде; в частности, веб-сервер. Является ли этот класс хорошим кандидатом на роль одиночки?

Какая разница между реализацией этого класса как одиночного и просто использованием static методов?

Каким будет эффект от тысяч пользователей, получающих доступ к этому объекту / этим методам?

Я мог бы сделать класс обычным классом, но его создание каждый раз, когда это необходимо, было бы пустой тратой памяти.

Ответы [ 4 ]

2 голосов
/ 01 июля 2011

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

Так что, если вам не нужно сохранять состояние в вашем классе / методе, я бы предложилиспользовать статический подход.

2 голосов
/ 01 июля 2011

Infact вместо синглтона можно сделать методами static.

Синглтон не обязательно должен быть только 1, вы можете создать пул экземпляров и делегировать работу в зависимости от требований, если у вас нет такого управления статическими методами.

обсуждение Singleton vs Static methods здесь здесь

1 голос
/ 01 июля 2011

Как было сказано ранее, учитывая, что у вашего класса нет состояния объекта, статические методы будут работать просто отлично.
Однако учтите следующее - В зависимости от общего дизайна вашей системы, вы можете захотеть бытьвозможность указать другую реализацию методов.Обычно это делается с помощью подклассов (...) или реализации интерфейса (теперь предпочтительный метод) - найдите шаблон стратегии.В любом случае для обеспечения альтернативных реализаций вам потребуется не использовать статические методы, а иметь (пустой) объект для вызова методов.

1 голос
/ 01 июля 2011

Нет необходимости использовать синглтон здесь (так как вам не нужно состояние), вы можете использовать статические методы.Синглтон в принципе предлагает больше контроля, позволяя государству.В вашем случае не будет большой разницы, но статические методы будут проще реализовывать и использовать.

  • Каким будет влияние тысяч пользователей, получающих доступ к этому объекту / этим методам?Опять же, нет большой разницы в обоих случаях, но в Singleton у вас может быть состояние, и если вы не будете тщательно его реализовывать, ваш код будет не поточно-ориентированным.Каждый пользователь, вызывающий статический метод, получает свой собственный «экземпляр» метода (я думаю, это то, о чем вы спрашиваете), поэтому нет риска столкнуться с проблемами безопасности потоков.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...