工厂模式会解决我的问题吗?

Nei*_*ell 5 c# design-patterns

我需要创建一些实现给定接口的对象,其中创建的具体实现的类型基于Enum值.

当不同的具体实现在运行时需要不同的参数时,我遇到了麻烦.

这个例子(C#)很好:

public enum ProductCategory
{
    Modem,
    Keyboard,
    Monitor
}

public class SerialNumberValidatorFactory()
{
    public ISerialNumberValidator CreateValidator(ProductCategory productCategory)
    {
        switch (productCategory)
        {
            case ProductCategory.Modem:
                return new ModemSerialNumberValidator();
            case ProductCategory.Keyboard:
                return new KeyboardSerialNumberValidator();
            case ProductCategory.Monitor:
                return new MonitorSerialNumberValidator();
            default:
                throw new ArgumentException("productType", string.Format("Product category not supported for serial number validation: {0}", productCategory))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果具体实现具有不同的构造函数参数会发生什么?我无法将所有值传递给SerialNumberValidatorFactory.CreateValidator()方法,所以我该如何处理?

我听说这种Abstract Factory模式应该可以解决这个问题,但我不确定如何正确实现它.

Ada*_*rth 2

您始终可以创建一个设置容器来传递给该CreateValidator方法。从一个基础开始IValidatorSettings,然后创建IModemSerialNumberValidatorSettings等等,CreateValidator然后你可以接受ProductTypeIValidatorSettings参数。

然后,验证器的具体类会将其IXXXValidatorSettings接口作为唯一的构造函数参数。

除此之外,您还可以创建一个IValidatorSettings工厂。

我认为抽象工厂是一个创建工厂来处理给定类型集的工厂 - 不确定它是否适用于您的场景。