我的代码如下所示
@H_502_2@public interface ICar
{
void Created();
}
public class BigCar : ICar
{
public void Created()
{
}
}
public class SmallCar : ICar
{
public void Created()
{
}
}
public class LuxaryCar : ICar
{
public void Created()
{
}
}
public class CarFactory
{
public ICar CreateCar(int carType)
{
switch (carType)
{
case 0:
return new BigCar();
case 1:
return new SmallCar();
case 2:
return new LuxaryCar();
default:
break;
}
return null;
}
}
在这段代码中,我有一个返回具体实例的工厂.但每次我需要有一个新的ICar接口实现时,我必须更改CarFactory的CreateCar()方法.我似乎不支持SOLID原则的开放封闭原则.请建议有更好的方法来处理这种情况.@H_403_5@
解决方法
您可能希望使其可配置,如下所示:
@H_502_2@void Main()
{
// configurable array
var factories = new ICarFactory[] { new BigCarFactory() };
// create factory
var realfactory = new CarFactory(factories);
// create car
var car = realfactory.CreateCar(0);
}
public class CarFactory : ICarFactory
{
private ICarFactory[] _factories;
public CarFactory (ICarFactory[] factories)
{
_factories = factories;
}
public ICar CreateCar(int carType)
{
return _factories.Where(x=>x.SupportCar(carType)).First().CreateCar(carType);
}
public bool SupportCar(int type) => _factories.Any(x=>x.SupportCar(type));
}
public interface ICarFactory
{
ICar CreateCar(int type);
bool SupportCar(int type);
}
public class BigCarFactory : ICarFactory
{
public ICar CreateCar(int carType)
{
if(carType != 0) throw new NotSupportedException();
return new BigCar();
}
public bool SupportCar(int type) => type == 0;
}
public interface ICar
{
void Created();
}
public class BigCar : ICar
{
public void Created()
{
}
}
public class SmallCar : ICar
{
public void Created()
{
}
}
public class LuxaryCar : ICar
{
public void Created()
{
}
}