可以利用状态模式来替换状态类型吗?

时间:2015-09-18 21:42:13

标签: design-patterns state

我刚刚了解了状态设计模式,我想知道将模式应用于"类型"是否合适。情况是这样的:我们有几种不同类型的数据导入,并且取决于用户选择的类型,取决于我们如何导入数据。

我对状态模式的理解是它不需要创建复杂的开关和/或if语句利用状态。像我的导入,我也想根据类型消除switch / if语句。与州不同,一旦导入文件,我将永远不会将其状态或类型更改为其他状态或类型。

我想删除下面的代码,所以当我们必须添加更多类型时,它将更容易维护:

    //Prompt user to select import type then go below

     switch (typeof(MyDataToImportType))
        {
            case FileLatePaymentsImport:
                //Import File1
                break;
            case DatabaseReportsImport:
                //connect to db
                break;
            default :
                break;
        }

2 个答案:

答案 0 :(得分:2)

看起来你需要的是使用策略而不是状态。

您可以通过在某处(或Dictionary<Type, IImportStrategy>提供类型并返回正确的策略实例)删除该开关。

Factory界面的示例可以是

IImportStrategy

然后,您将实现两个实现interface IImportStrategy { void Execute(); } class FileLatePaymentsImport IImportStrategy,其中包含特定逻辑。

答案 1 :(得分:0)

当事件的影响取决于当前状态时,状态模式更适合对事件做出反应。

所以我完全同意Sebastian Piu的观点,即战略模式更符合你的目的。