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

C# 如何避免将多个参数传递给工厂方法?,c#,factory,C#,Factory,假设我有3个类:A、B和C(从实际代码中删除大量细节以简化事情),其中包含一个工厂方法,该方法创建一个从接口D派生的对象(顺便说一下,这是伪代码): 我想做的是避免在CreateD()方法中传入所有参数。我还希望避免类A包含对这些对象的引用(因为可能有许多类A的实例)。我怎样才能做到这一点呢?我想你要找的是。使用构建器模式,您将按组合构建对象。例如(来自维基百科): 创建包含参数arg1-arg6的新类或结构。这样,您只有一个参数。如果确实需要六个参数,请检查代码;这可能表明类做得太多。创建一些

假设我有3个类:A、B和C(从实际代码中删除大量细节以简化事情),其中包含一个工厂方法,该方法创建一个从接口D派生的对象(顺便说一下,这是伪代码):


我想做的是避免在CreateD()方法中传入所有参数。我还希望避免类A包含对这些对象的引用(因为可能有许多类A的实例)。我怎样才能做到这一点呢?

我想你要找的是。使用构建器模式,您将按组合构建对象。例如(来自维基百科):


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

创建一些小类或结构,其唯一目的是传递所需的构造参数。或者,也可以使用在接口构造之后设置的接口上的属性替换其中的一些属性。避免过度工程化,请注意.NET框架如何在没有大量工厂的情况下完成其工作。我考虑过这一点,但许多争论都是工厂本身。也许这没什么大不了的。似乎我可以用一种创造性的模式来代替。
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);
        }
    }
}
CarBuilder builder = new CarBuilder();

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

Car car = builder.GetResult();