假设我有3个类:A,B和C(从实际代码中删除大量细节以简化事情),其中包含一个工厂方法,该方法创建一个派生自接口D的对象(这是伪代码方式):
public abstract class A
{
public A()
{
}
public abstract D CreateD(arg1, arg2, arg3, arg4, arg5, arg6);
}
public class B : A
{
public B()
: base()
{
}
public D CreateD(arg1, arg2, arg3, arg4, arg5, arg6)
{
return new E(arg1, arg2, arg3, arg4, arg5, arg6);
}
}
public class C : A
{
private bool someFlag;
public C(bool someFlag)
: base()
{
this.someFlag = someFlag;
}
public D CreateD(arg1, arg2, arg3, arg4, arg5, arg6)
{
if (this.someFlag)
{
return new F(arg1, arg2, arg3, arg4, arg5, arg6);
}
else
{
return new G(arg1, arg2, arg3, arg4, arg5, arg6);
}
}
}
我想要做的是避免传递CreateD()方法中的所有参数。我还想避免让A类包含对这些对象的引用(因为可能有很多A实例)。我怎么能做到这一点?
答案 0 :(得分:0)
我认为您正在寻找的是Builder pattern。使用Builder模式,您将按合成构建对象。例如(来自维基百科):
CarBuilder builder = new CarBuilder();
builder.SetColour("Red");
builder.SetWheels(4);
Car car = builder.GetResult();
答案 1 :(得分:0)
创建一个包含参数arg1-arg6的新类或结构。这样你只有一个参数。如果你真的需要六个参数,请检查你的代码;这可能表明班级做得太多了。