【设计模式】空接口

embedded/2024/12/21 11:51:40/

(空)接口的用法总结

接口用于定义某个类的特定能力或特性。在工作流或任务管理系统中,接口可以帮助标识哪些任务可以在特定阶段执行。通过实现这些接口,任务类可以被标识为在相应的阶段可以执行,从而在验证和执行逻辑中进行类型检查。

1. 接口定义(空接口,用来做标签)

定义两个接口,分别用于标识任务。举例如下,在暂停/恢复阶段和完成阶段的可执行性。

namespace MyApp.Workflow.Commands
{public interface ICanRunInPauseResumePhase{}public interface ICanRunInCompletionPhase{}
}
2. 实现接口的任务类

创建一个任务类,实现上述接口,以表明该任务可以在相应的阶段执行

using MyApp.Workflow.Commands;namespace MyApp.Workflow.Commands.Processing
{public class DataProcessingTask : Task, ICanRunInPauseResumePhase, ICanRunInCompletionPhase{public DataInput InputData { get; } = new(nameof(InputData));public override void Start(ITaskExecutionContext context){// 执行数据处理逻辑InputData.Process(context);}public override List<Error> Validate(ITaskExecutionContext context){List<Error> errors = new List<Error>();if (!InputData.IsValid()){var error = new Error(ErrorSeverity.Critical,context.Thread,this,"INVALID_INPUT_DATA",InputData.Value == null ? string.Empty : InputData.Value);errors.Add(error);}return errors;}public override List<IInput> Inputs() =>new List<IInput>() { InputData };}
}
3. 验证任务的有效性

在验证任务的逻辑中,使用接口来检查任务是否可以在特定阶段执行。为了利用接口Interface,这里,可以用泛型 或者模板的方式,

private static bool CanTaskBeUsedInPhase<TRequiredTaskInterface>(Task task,ITaskExecutionContext context,List<Error> errors,string errorMessage,Task taskToAssignError)where TRequiredTaskInterface : class
{if (task is TRequiredTaskInterface){return true;}errors.Add(new Error(ErrorSeverity.Critical,context.Thread,taskToAssignError,errorMessage));return false;
}
4. 在工作流中使用

在工作流的执行过程中,根据任务是否实现了这些接口来决定是否执行该任务。

if (!CanTaskBeUsedInPhase<ICanRunInCompletionPhase>(task, context, errors, "Task not allowed in this phase", taskToAssignError))
{continue;
}

总结

  • 接口用于标识任务在特定阶段的可执行性空接口,可以赋予属性标签
  • 通过实现接口,任务类可以被标识为在相应的工作流阶段可以执行。
  • 在验证和执行任务时,可以使用接口进行类型检查,以确保任务在适当的阶段被调用

http://www.ppmy.cn/embedded/147522.html

相关文章

vue create 创建项目 提示 Failed to check for updates 淘宝 NPM 镜像站喊你切换新域名啦

1、使用 vue create demo创建项目的时候发现 提示 “Failed to check for updates”&#xff0c; 执行 npm config list 看了一下 镜像源是&#xff1a;https://registry.npm.taobao.org 然后搜索一下发现这个淘宝这个镜像域名切换了。 公告地址&#xff1a;【公告】淘宝 npm …

WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)

一:基本介绍 WebMvcConfigurer是接口&#xff0c;用于配置全局的SpringMVC的相关属性&#xff0c;采用JAVABean的方式来代替传统的XML配置文件&#xff0c;提供了跨域设置、静态资源处理器、类型转化器、自定义拦截器、页面跳转等能力。 WebMvcConfigurationSupport是webmvc的…

【C语言】打牌游戏

相信你是最棒哒&#xff01;&#xff01;&#xff01; 文章目录 题目描述 正确代码 总结 题目描述 Suneet 和 Slavic 玩一个卡牌游戏。游戏规则如下&#xff1a; 每张卡片的整数值在 1 和 10之间。每位玩家获得 2 张面朝下的卡片&#xff08;因此玩家不知道自己的卡片&#…

《剑网三》遇到找不到d3dx9_42.dll的问题要怎么解决?缺失d3dx9_42.dll是什么原因?

《剑网三》游戏运行中d3dx9_42.dll缺失问题深度解析与解决方案 在畅游《剑网三》的武侠世界时&#xff0c;不少玩家可能会遇到系统提示“找不到d3dx9_42.dll”的报错信息。这一突如其来的问题不仅让游戏进程受阻&#xff0c;还可能让玩家陷入困惑与无奈。我将为大家深入剖析这…

Qt Quick:CheckBox 复选框

复选框不止选中和未选中2种状态哦&#xff0c;它还有1种部分选中的状态。这3种状态都是Qt自带的&#xff0c;如果想让复选框有部分选中这个状态&#xff0c;需要将三态属性&#xff08;tristate&#xff09;设为true。 未选中的状态值为0&#xff0c;部分选中是1&#xff0c;选…

实战技巧 DevEco Profiler 性能调优 Time

实战技巧 DevEco Profiler 性能调优 Time 背景 DevEco Studio 开发工具中提供了 Profiler 面板&#xff0c;可以让我们在针对实际开发应用过程中碰到的一些性能相关的问题提供解决方案。如响应速度慢、动画卡顿、内存泄漏、发热、耗电快等等场景。其中 Profiler 提供了实时监…

iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境

在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境&#xff0c;并为每个环境使用不同的 Bundle ID&#xff0c;可以通过以下步骤实现&#xff1a; 步骤 1: 创建不同的 Build Configuration 打开项目&#xff1a; 启动 Xcode 并打开你的项目。 选择项目文件&…

ChromeOS 131 版本更新

ChromeOS 131 版本更新 1. ChromeOS Flex 自动注册 在 ChromeOS 131 中&#xff0c;ChromeOS Flex 的自动注册功能现已允许大规模部署 ChromeOS Flex 设备。与 ChromeOS 零接触注册类似&#xff0c;自动注册将通过组织管理员创建的注册令牌嵌入到 ChromeOS Flex 镜像中。这将…