工作流和背包模式虽然不在23种常用设计模式中,但是在对任务编排处理类的业务代码使用起来是非常有用的。
下面给大家介绍下工作流模式:
例如,我之前有个项目需要对模型进行转换,因为不同配置的模型需要使用的转换方法不同,且单个模型需要经历多次的执行转换脚本,那就可以把每个脚本抽离出来封装为工作流中的一个字节点,通过对节点编排适应不同的转换任务,代码流程清晰,转换流程通过配置文件进行配置。
背包模式呢,其实并不算是一种标准的设计模式,逻辑上可以理解为借鉴现实中“背包”的特性:可以装载不同类型的物品,并方便地进行取出或使用。在软件开发中,配合工作流模式,可以非常方便为工作流节点的执行提供需要的参数,这个也是我在非23种常用设计模式外比较喜欢的一种模式,例如在执行某个任务需要大量的组装参数等模式的代码上,我比较喜欢封装到统一的一个类中处理,后续的任务就把这个类从上至下传递,所有需要的参数都从类中直接获取,不需要在业务代码用到的地方才再去处理参数,而是预处理好参数,需要就去取。相当于把后续处理的多数参数都揣到兜里,需要就掏出来。
给大家一个简单的 工作流、背包、工厂、适配器模式的整合demo:
适配器模式的核心目的是将一个接口转换为客户期望的另一个接口,从而兼容不同接口的实现。这在代码中也有所体现:
工厂模式职责:
• WorkflowNodeFactory 提供了一个中央注册表,用于将 type 和实际适配器类(Class)关联起来。
• 工厂方法 createNode 根据类型创建实例并注入配置。
• 工厂屏蔽了对象创建的细节,外部调用者不需要知道具体的适配器实现类。
• 适配器职责:PaymentServiceAdapter、MessageQueueAdapter 和 CustomLoggingAdapter 都实现了统一的接口 WorkflowAdapter,屏蔽了每个模块的差异。
• 比如,PaymentServiceAdapter 适配了支付模块的内部逻辑。
• MessageQueueAdapter 适配了消息队列的逻辑。
• 统一接口:
• 这些适配器共同实现 WorkflowAdapter 接口,工作流引擎调用时无需关心具体的适配器实现,只需要依赖接口即可。
• 每个适配器从外部来看都实现了统一的 execute 方法,但内部适配了不同的逻辑和数据。
项目结构:
src/
├── adapters/
│ ├── WorkflowAdapter.java
│ ├── ConfigurableAdapter.java
│ ├── PaymentServiceAdapter.java
│ ├── MessageQueueAdapter.java
│ ├── CustomLoggingAdapter.java
├── core/
│ ├── WorkflowNodeFactory.java
│ ├── WorkflowConfigLoader.java
│ ├── ConfigurableWorkflow.java
│ ├── Backpack.java
├── main/
│ ├── WorkflowTest.java
resources/
├── workflow-config.yaml
</

最低0.47元/天 解锁文章
924

被折叠的 条评论
为什么被折叠?



