当程序猿去了螺丝厂
螺丝厂
你有没有遇到过像螺丝厂一样的流水线式事情。像下面这样,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)
There are two things to do in a day: a happy thing and a difficult one.