Activator.CreateInstance против заводского шаблона

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


person Selçuk Öztürk    schedule 06.04.2010    source источник
comment
Activator.CreateInstance создаст экземпляр объекта для вас из типа. Его вполне можно включить в шаблон Factory.   -  person Mikael Svenson    schedule 06.04.2010


Ответы (2)


Фабричный шаблон — это шаблон более высокого уровня. Это дает вам структуру, в которой вы можете решить некоторые проблемы, которые могут возникнуть при создании объекта. Цитата из Википедии:

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

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

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

person Andy Mortimer    schedule 06.04.2010

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

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

Вы можете «использовать» Activator.CreateInstance в фабричном шаблоне для возврата различных типов объектов. см. этот пример. Вы также можете создать универсальную фабрику, используя Activator.CreateInstance

person KMån    schedule 06.04.2010