@LightSouls

Как правильно пользоваться фабрикой?

Часто в различных проектах, которые используют DI, встречаю примерно такую реализацию фабричного метода с использованием enum :
class VehicleFactory
{
    public Vehicle Create(VehicleType type)
    {
        switch (type)
        {
            case Car:
                return new Car();
            case Truck:
                return new Truck();
        }
    }
}

Такой класс придется менять если появится какой-то новый тип. Но если добавить в базовый Vehicle метод GetType() и воспользоваться DI, то класс менять не придется сколько бы новых типов не появилось:
class VehicleFactory
{
    private readonly List<Vehicle> vehicles;  // внедряется через конструктор

    public Vehicle Create(VehicleType type)
    {
         vehicles.FirstOrDefault(vehicle => vehicle.GetType() == type);
    }
}


Правильно ли так делать и есть ли в этом решении какие - либо минусы ? На мой взгляд это лучше чем свич на несколько сотен строк, но не видел чтобы кто-то так делал, не понимаю почему
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
@WaterSmith
Android-разработчик. Java, Kotlin
Если я правильно понял ход ваших мыслей, то у вас в классе будет храниться уже готовый список инициализированных объектов, и ваша "фабрика", при обращении к методу Create, вместо того чтобы создавать объект нужного типа, будет каждый раз отдавать один и тот же, лежащий в списке.
Нужно объяснять, какие будут последствия?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы