我的代码如下所示
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() { } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。