c# – 工厂类不支持SOLID原则
发布时间:2020-12-15 08:20:08 所属栏目:百科 来源:网络整理
导读:我的代码如下所示 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 Car
我的代码如下所示
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原则的开放封闭原则.请建议有更好的方法来处理这种情况. 解决方法
您可能希望使其可配置,如下所示:
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() { } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |