2013-09-24 2 views
1

Название в значительной степени суммирует его.Должен ли статический метод «create() Factory Class? Или сделать Singleton Factory Class?

У меня есть фабричный класс, который будет строить экземпляр другого класса, когда вызывается метод create(). У меня есть настройки моего класса фабрики быть синглтон, который заставляет invokation выглядеть так:

SomeClass clazz = (SomeClass) FactoryClass.getInstance().create(ENUM.TYPE); 

Это гарантирует, что моя фабрика является поточно, но может привести к блокировке и т.д.

Если мой завод а не одиночный, я мог бы вместо этого установить мой метод .create(): static, что обеспечит аналогичные результаты.

SomeClass clazz = (SomeClass) FactoryClass.create(ENUM.TYPE); 

Предполагая, что несколько потоков могут попытаться создать экземпляры объектов через FactoryClass, что лучше? Не оба способа сделать это обеспечивают одинаковый уровень безопасности потоков?

+0

Безопасность потока будет исходить из всех необходимых объектов, создаваемых локально, т.е. в теле метода. –

+2

Одиночный подход позволяет переключаться между несколькими реализациями фабрики. – Detheroc

+0

@ Detheroc as-in несколько заводов? Я не уверен, что понимаю, извините. – SnakeDoc

ответ

3

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

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

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