Я прочитал несколько руководств о фабрике, абстрактном фабричном шаблоне и видел несколько примеров. В одном из руководств я прочитал, что фабричный шаблон может заменить основные операторы «если» или «переключить регистр» и следует принципам открытости/закрытости (твердых).
В одном из моих проектов есть огромный «корпус переключателей», который я хочу заменить (n) (абстрактной) фабрикой. Он уже основан на интерфейсе, поэтому реализация фабрики не должна быть такой сложной, но во всех примерах, которые я читал в учебниках, фабрика создавала один конкретный тип на основе конфигурации. Может ли кто-нибудь указать мне правильное направление, как реализовать фабрику, которая могла бы производить несколько типов на основе перечисления, которое следует принципам Solid и заменяет большой «случай переключателя»... или я дезинформирован и является «случай переключателя» переехали на завод?
код на данный момент:
public interface ISingleMailProcessor : IMailProcessor
{
MailResult ProcesMail(Mail mail);
}
public MailResult GetMailResult(mail)
{
ISingleMailProcessor mailprocessor;
switch (mail.MailType)
{
case MailConnector.MailType.AcronisBackup:
mailprocessor = new AcronisProcessor();
return mailprocessor.ProcesMail(mail);
case ......etc.
}
}
enum
имеет фиксированную длину — вы не можете никоим образом расшириться — так что это точно так же, как операторswitch
. Так что в некотором смысле он имеет те же ограничения. Не могли бы вы опубликовать своиenum
и и примеры операторовif
/switch
, которые вы хотите заменить? - person Enigmativity   schedule 21.07.2015Mail.MailType
всегда возвращаетсяMailResult
? - person Enigmativity   schedule 21.07.2015