У меня есть требование создать несколько объектов, которые реализуют данный интерфейс, где тип создаваемой конкретной реализации основан на значении 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))
}
}
}
Однако что произойдет, если конкретные реализации имеют разные аргументы конструктора?Я не могу передать все значения методу SerialNumberValidatorFactory.CreateValidator()
, так как мне продолжить?
Я слышал, что шаблон Abstract Factory
должен решить эту проблему, но я не уверен, какреализовать это правильно.