Я знаком с этими шаблонами, но до сих пор не знаю, как справиться с следующей ситуацией:
public class CarFactory
{
public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6)
{
}
public ICar CreateCar(type)
{
switch(type)
{
case A:
return new Car1(Dep1,Dep2,Dep3);
break;
case B:
return new Car2(Dep4,Dep5,Dep6);
break;
}
}
}
В общем, проблема связана с количеством ссылок, которые нужно вводить. Будет еще хуже, когда появится больше автомобилей.
Первый подход, который приходит мне на ум, заключается в том, чтобы вводить Car1 и Car2 в конструктор factory, но он против подхода factory, потому что factory всегда возвращает тот же объект. Второй подход заключается в том, чтобы вводить servicelocator, но он все время противостоят. Как его решить?
Изменить:
Альтернативный способ 1:
public class CarFactory
{
public CarFactory(IContainer container)
{
_container = container;
}
public ICar CreateCar(type)
{
switch(type)
{
case A:
return _container.Resolve<ICar1>();
break;
case B:
return _container.Resolve<ICar2>();
break;
}
}
}
Альтернативный способ 2 (слишком сложный для использования из-за слишком большого количества зависимостей в дереве):
public class CarFactory
{
public CarFactory()
{
}
public ICar CreateCar(type)
{
switch(type)
{
case A:
return new Car1(new Dep1(),new Dep2(new Dep683(),new Dep684()),....)
break;
case B:
return new Car2(new Dep4(),new Dep5(new Dep777(),new Dep684()),....)
break;
}
}
}