当程序猿去了螺丝厂

螺丝厂

你有没有遇到过像螺丝厂一样的流水线式事情。像下面这样,A-B-C-D-E-F......

那这种的,用代码如何实现呢?我们很容易会想到使用责任链设计模式去实现。

什么是责任链

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

于是,我们可能会写出如下的代码:

A a = new A();
B b = new B();
C c = new C();
D d = new D();
E e = new E();
F f = new F();

a.setNext(b);
b.setNext(c);
c.setNext(d);
d.setNext(e);
e.setNext(f);

a.handler();

很好,这样可以实现我们的工作流要求。只需要触发a.handler(),代码内部就可以依次执行d,c,d,e,f的流程处理。

动态责任链

普通的责任链模式实现工作流有一个很严重的缺点。假如某一天,c流程取消掉,可以直接从b到d。那代码就得拿出来重新修改了。这是我们无法忍受的。灵活性太差了。

于是,我们提出如下一种解决方案,使得责任链中的节点可以动态变化,就称它为动态责任链吧。每一次根据配置文件生成需要的工作流。

使用到了责任链模式+工厂方法模式

(注意:这里我们使用Enum实现动态配置,真实使用中可以从DB中读取,配置文件中读取等等)

整体的设计思路如下图,样板代码详见:design_mode/chain · zomicc/code - 码云 - 开源中国 (gitee.com)

posted @ 2022-08-30 15:51  zomicc  阅读(12)  评论(0编辑  收藏  举报