В чем разница между Activator.CreateInstance
и фабрикой? Могут ли они использоваться как взаимозаменяемые? Или все-таки нужен заводской выкрой?
2 ответа
Заводской шаблон - это шаблон более высокого уровня. Это дает вам структуру, в которой вы можете решить некоторые проблемы, которые могут возникнуть при создании объекта. Цитируя Википедию,
Создание объекта часто требует сложных процессов, которые нельзя включать в составной объект. Создание объекта может привести к значительному дублированию кода, может потребовать информации, недоступной для составляющего объекта, может не обеспечить достаточного уровня абстракции или может иным образом не быть частью проблем составляющего объекта.
Некоторые из процессов, требуемых при создании объекта, включают определение того, какой объект создать, управление временем жизни объекта и управление специализированными задачами создания и удаления объекта.
Activator.CreateInstance не решает ни одну из этих проблем, он просто позволяет вам создать новый экземпляр типа. Если у вас нет проблем, подобных описанным выше (и многие варианты использования «фабричного шаблона» не относятся к таким проблемам), Activator.CreateInstance подойдет.
Activator.CreateInstance
- это статический метод, который создает экземпляр указанный тип с использованием конструктора по умолчанию для этого типа.
Хотя шаблон фабрики решает проблему создания объектов (продуктов) без указания точного класса объекта что будет создано.
Вы можете "использовать" Activator.CreateInstance
в шаблоне фабрики для возврата различных типов объектов. См. этот пример. Вы также можете создать общую фабрику, используя Activator.CreateInstance
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.