【发布时间】:2015-07-22 17:13:04
【问题描述】:
我阅读了一些关于工厂和抽象工厂模式的教程,并看到了一些例子。在其中一个教程中,我读到工厂模式可以替换主要的“if”或“switch case”语句,并遵循开放/封闭(可靠)原则。
在我的一个项目中,有一个巨大的“开关盒”,我想用(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语句的示例? -
我添加了一些已经在项目中的代码。
-
所以总是
MailResult从Mail.MailType返回? -
是的,并且邮件结果是一个类,其中MailType是一个枚举作为Mail类的属性
标签: c# design-patterns factory-pattern