Синглтон с состоянием? - PullRequest
       11

Синглтон с состоянием?

4 голосов
/ 29 сентября 2011

Привет, я спросил об этом в документе для интервью.

Синглтон и прототип (не синглтон), который находится в состоянии с состоянием и который не имеет состояния

Я не уверен, что прототип не имеет состояния? Есть ли проблема с вопросом?

Ответы [ 6 ]

6 голосов
/ 29 сентября 2011

Сам вопрос плохо сформулирован. Вы можете иметь состояние как в Singletons, так и в Prototypes (экземплярах), так как это юридический код, но вам не нужно иметь состояние в обоих случаях. Поскольку упоминается о Spring, я постараюсь ответить на этот вопрос в отношении работы с Spring.

С точки зрения области действия Spring bean, singleton заставит ApplicationContext создать отдельный экземпляр и использовать его везде, где запрашивается bean-компонент. prototype заставит ApplicationContext создавать новый экземпляр каждый раз, когда запрашивается компонент.

Это нормально для обоих из них, чтобы быть с состоянием.

5 голосов
/ 29 сентября 2011

Бобы-прототипы и бобы Singleton могут содержать состояние. Однако, согласно документации Spring , "вы должны использовать область действия прототипа для всех bean-компонентов с состоянием, в то время как единственная область должна использоваться для bean-компонентов без сохранения состояния".

4 голосов
/ 29 сентября 2011

Этот вопрос выглядит вполне законным (хотя и плохо сформулированным), если вы читаете «не имеющее состояния» как «не имеет разговорного состояния», то есть состояния, связанного с беседой с конкретным клиентом.

В этих терминахБины с singleton -объектом обычно не сохраняют состояния, потому что они используются несколькими клиентами одновременно, а их состояния не зависят от клиента.

Скорее, бины с prototype -обществом часто создаются в контекстедиалога с конкретным клиентом (хотя области request и session могут быть более подходящими иногда), так что их состояния связаны с этими беседами (потому что если вашему бобу не нужно сохранять какое-либо диалоговое состояние, вы можетесделать это singleton).В этом смысле prototype bean-компоненты с состоянием.

0 голосов
/ 18 августа 2016

синглтон не является объектом данных, представьте, что синглтон является оберткой данных, методы точки доступа,

синглтон может быть уничтожен, но представленное состояние сохраняется отдельно и независимо и будет представлено после повторного создания синглтона (android отправляет приветствияуничтоженные синглтоны - пресловутая ловушка)

0 голосов
/ 30 сентября 2011

Синглтон без состояния - это в значительной степени набор статических методов;он не отличается от статического утилитного класса, и на самом деле не имеет значения, сколько их экземпляров: 0, 1, 2 или бесконечность.

Поэтому синглтоны, как правило, с состоянием.

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

0 голосов
/ 29 сентября 2011

Лучшим вопросом может быть "Является ли Singleton многопотоковым?"Вам просто нужно быть более осторожным, если он изменчив.Если да, он может стать узким местом для вашего приложения.Синхронизация этого общего, доступного для записи состояния должна быть выполнена.

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