С программным обеспечением , в общем , фабрики часто используются для уменьшения зависимостей.Только фабрика должна знать обо всех типах, которые она может создать, о преобразованиях, которые она должна применять, и много зависимостей могут быть абстрагированы от клиента - клиентам, которые имеют дело с фабрикой, не нужно видеть интерфейс для каждого типа фабрикиможет создать.
Поскольку языки интерпретируются и компилируются очень по-разному, это влияет на некоторые языки больше, чем на другие.Таким образом, и абстрактная фабрика может скрывать целые библиотеки за своим интерфейсом.
Таким образом, CodeInChaos указал, что в данном случае это действительно именованный конструктор - но может , но физическая зависимость все еще может быть абстрагированнойпо этому сценарию? ДА! .Давайте создадим пример сценария с использованием цветов.
Допустим, есть класс, который определяет цвет.Этот класс имеет несколько специализаций и различных членов, чтобы точно представлять каждую доступную специализацию цвета - скажем, оттенки серого, RGB и CMYK.Наивный метод преобразования уже способен создавать недопустимые цвета.С фабричным методом вы можете использовать тип для абстрагирования этой сложности, запрашивая тип произвольного цвета для преобразования его цветовой моделью.То есть преобразование преобразования RGBA в оттенки серого является одной функцией, а преобразование CMYK в RGBA - другой функцией.Абстрактное представление цвета может иметь метод с именем asRGBA()
для обработки этого преобразования, где каждая специализация или подтип может предлагать совершенно разные реализации преобразования.
Хорошо, это абстрагирует некоторую сложность и сохраняет все наши цвета легальными(RGB не может представлять все значения CMYK).Кажется слишком сложным? Нет .На самом деле цветовых представлений больше.Кроме того, существуют цветовые профили, которые могут быть специфическими для устройств (например, монитора) или специфическими для других целей (например, подключенного принтера).Функции преобразования для этих профилей намного сложнее.
Для базового представления цвета нам нужно будет ввести много зависимостей для обработки всех этих устройств и целей.Хорошо продуманные фабричные методы могут абстрагировать все это и использовать оптимизированные реализации для этих преобразований, уменьшая при этом зависимости.
Это надуманный пример (я не разработчик C #), но он иллюстрирует, как фабричные методы могут использоватьсяуменьшить сложность и минимизировать зависимости.