2010-04-06 2 views
2

В чем разница между Activator.CreateInstance и фабрикой? Можно ли их использовать взаимозаменяемо? Или нам нужна фабрика?Activator.CreateInstance vs Factory Pattern

+0

Activator.CreateInstance создаст объект для вас из типа. Он вполне может быть включен в шаблон Factory. –

ответ

3

Заводская модель представляет собой узор более высокого уровня. Это дает вам структуру, в которой вы можете решить некоторые проблемы, которые могут возникнуть при создании объекта. Цитирую Wikipedia,

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

Некоторые из процессов, необходимых в создания объекта включает определение, какой объект для создания, управления временем жизнью объекта, и управление специализированным накапливанием и разрываться проблемами объекта.

Activator.CreateInstance не относится ни к одной из этих проблем, он просто позволяет создать новый экземпляр типа. Если у вас нет таких проблем, как указано выше (и многие применения «заводского шаблона» не относятся к таким проблемам), Activator.CreateInstance будет в порядке.

3

Activator.CreateInstance - статический метод, который создает экземпляр указанного типа с использованием конструктора по умолчанию этого типа.

В то время как factory pattern касается проблемы создания объектов (продуктов) без указания точного класса объекта, который будет создан.

Вы можете «использовать» Activator.CreateInstance в рамках заводского шаблона для возврата различных типов объектов. See this example. Вы также можете использовать create a generic factory с использованием Activator.CreateInstance