0%

职责链

关于如何以面向对象的方式去完成一套业务逻辑的编写

代码

什么是职责链

职责链[1]是相对来说比较好理解的设计模式, 毕竟和现实是那么相近. 他也是面向对象的一种模式. 具体的请参考下文

例子

以进入某些场所为例, 保安会先检查是否有24小时核酸, 有的话会让你进门, 否则的话不让你进门. 接着前台会看是否到过高风险地区, 没有的话让你进大厦, 否则进不了大厦.

在这里门卫和前台承担了不同的职责, 他们不需要管前面的人做了什么, 只需完成自己分内的工作, 再将工作交接给后续的人去完成. 这个例子非常简单, 现实中职责链可以表示更复杂的流程. 如医院的分诊, 公司 OA 流程等等.

1
2
3
4
5
6
7
8
9
10
11
st=>start: Start
chcin24h=>condition: 有24小时核酸?
fhra=>condition: 来自高风险地区?
enter=>end: 进入
refuse=>end: 拒绝

st->chcin24h
chcin24h(yes)->fhra
chcin24h(no)->refuse
fhra(no)->enter
fhra(yes)->refuse

代码实现

image-20220717112956307

IMiddleware 是职责链中逻辑块的接口. MiddlewareChainBuilder 则是负责创建职责链.

image-20220717113225378

首先, 在程序开始的时候注册各个逻辑块为单例模式

image-20220717113600902

接着调用 MiddlewareChainBuilder 的 CreateChain 方法. 这个方法最主要的作用就是给每个逻辑块制安上了左膀右臂, 使得逻辑块之间都相连起来.

image-20220717114411952

而各个逻辑块根据上一步传过来的数据判断下一步应该走向哪里. 因为很好理解就不展开讲了. 具体看代码吧.

参考链接