如何避免将几个参数传递给工厂方法?

时间:2016-02-21 17:50:04

标签: c# factory

假设我有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实例)。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是Builder pattern。使用Builder模式,您将按合成构建对象。例如(来自维基百科):

CarBuilder builder = new CarBuilder();

builder.SetColour("Red");
builder.SetWheels(4);

Car car = builder.GetResult();

答案 1 :(得分:0)

创建一个包含参数arg1-arg6的新类或结构。这样你只有一个参数。如果你真的需要六个参数,请检查你的代码;这可能表明班级做得太多了。