可以使用状态模式来用类型代替状态吗?

Can the state pattern be utilized to substitute types for state?

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

我对状态模式的理解是,它消除了使用状态创建复杂开关 and/or 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;
        }

看来您需要的是使用 Strategy 而不是 State。

您可以通过在某处设置 Dictionary<Type, IImportStrategy>(或提供类型和 return 正确策略实例的 Factory)来删除该开关

IImportStrategy 界面的一个例子可以是

interface IImportStrategy {
    void Execute();
}

然后您将实现两个实现 class FileLatePaymentsImport IImportStrategyclass DatabaseReportsImport: IImportStrategy,其中将包含特定逻辑。

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

所以我完全同意 Sebastian Piu 的观点,策略模式更适合您的情况。