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模式应该可以解决这个问题,但我不确定如何正确实现它.
您始终可以创建一个设置容器来传递给该CreateValidator方法。从一个基础开始IValidatorSettings,然后创建IModemSerialNumberValidatorSettings等等,CreateValidator然后你可以接受ProductType和IValidatorSettings参数。
然后,验证器的具体类会将其IXXXValidatorSettings接口作为唯一的构造函数参数。
除此之外,您还可以创建一个IValidatorSettings工厂。
我认为抽象工厂是一个创建工厂来处理给定类型集的工厂 - 不确定它是否适用于您的场景。