Должен ли я использовать измененный шаблон проектирования Singleton, который допускает только одну ссылку на его экземпляр? - PullRequest
0 голосов
/ 14 января 2011

У меня есть класс, который обычно генерирует фабричные объекты, однако этот класс должен использоваться только один раз в программе в одном месте.Какой шаблон проектирования лучше всего использовать в этом случае?

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

Это хорошая или плохая идея?Я пропустил еще один шаблон проектирования для решения этой проблемы?

Спасибо за вашу помощь.

Ответы [ 4 ]

2 голосов
/ 14 января 2011

Вместо того, чтобы добавлять окончательное статическое поле = new SingletonClass () и делать ctor закрытым, почему бы не управлять созданием самостоятельно, когда вы передаете его в качестве параметра всем материалам, которым требуется копия.Это вся точка внедрения зависимостей, классам не нужно вызывать статические поля для получения синглтона, вместо этого они получают экземпляр, который им нужен, в качестве параметра в ctor или сеттере.

1 голос
/ 14 января 2011

Вопрос в том, если когда-нибудь в будущем кто-то решит использовать этот класс в другой части программы, как он должен работать?

A.Это нормально, пусть они.Это не повлияет на другое использование этого.(Не используйте синглтон.)

B.Если для этого есть веская причина, это нормально, но это может испортить первое использование (из-за общих ресурсов или чего-то еще), поэтому им придется использовать тот же экземпляр, который используется в другом месте.(Используйте синглтон.)

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

1 голос
/ 14 января 2011

У меня есть класс, который обычно генерирует фабричные объекты, однако этот класс должен использоваться только один раз в программе в одном месте. Какой шаблон проектирования лучше всего использовать в этом случае?

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

1 голос
/ 14 января 2011

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

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

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

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