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

3
Selçuk Öztürk 6 Апр 2010 в 15:10
Activator.CreateInstance создаст для вас экземпляр объекта из типа. Его вполне можно включить в шаблон Factory.
 – 
Mikael Svenson
6 Апр 2010 в 15:16

2 ответа

Лучший ответ

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

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

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

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

3
Andy Mortimer 6 Апр 2010 в 15:42

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

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

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

4
Community 23 Май 2017 в 13:32