我正在为使用不同类型的部件(C#)构建机器人的程序制定解决方案。在这种情况下,我有两种类型共享一些属性,并且这两种类型的部分都继承自抽象类 Part。
到目前为止,我一直在从界面窗口中的实际按钮代码中调用 new,它是这样的。
if (type == acuatic)
Part pieceA = new AcuaticPart(type,name,price,maxDepth);
else
Part pieceB = new TerrestrialPart(type,name,price,terrain,maxTemp);
我知道这是完全错误的设计,我应该实现工厂方法。问题是我不知道是否可以像这样将所有参数发送到工厂:
在界面窗口中:
Part piece = _partFactory.CreatePart(type,name,price,maxDepth,terrain,maxTemp);
在混凝土厂:
public class ConcretePartFactory : PartFactory
{
public override Part CreatePart(type,name,price,maxDepth,terrain,maxTemp)
{
Part myPart = default(Part);
switch (type)
{
case "actuatic":
myPart = new AquaticPart(type,name,price,maxDepth);
break;
case "terrestrial":
myPart = new TerrestrialPart(type,name,price,terrain,maxTemp);
break;
}
return myPart;
}
}
问题是我仍然必须传递所有属性,我认为这不遵循开放/封闭原则,我该怎么做才能解决这个问题?谢谢!