首页 > PHP,好久不见 > 设计模式之职责链
2016
06-10

设计模式之职责链

什么是职责链

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

例子一:支付宝的花呗自动还款扣款顺序

余额->借记卡快捷->余额宝
首先会从余额扣款,若余额不足或扣款失败则将扣款这一动作往后传递~

例子二:备胎

母亲:闺女,你们也不小了。赶紧给我找个女婿,具体怎么找,你们自己决定。
大女儿:妈,别急,我正在找呢,我要求不高,对我好就行了。
小女儿:妈,我要求也不高,对我好也就可以啦~

女生说要求不高,往往要求很高~ 哼.jpg。但女生说自己懒,往往就是真的懒。这不,找上我这个程序员了。
大小女儿:foam,你是学计算机的,除了修电脑,帮忙找备胎也是会的哈~
foam:说吧,什么要求
大女儿:我要求不高,只要对我好就可以了。但,有钱很重要~
小女儿:我和姐姐一样,找个对我好的就行。但,长得帅很重要~
大小女儿:还有其他不是要求的要求嘛,长得高的不能太瘦,比较矮的又不能太胖;理科生的话最好会点音乐,文科生则需要懂点修电脑

foam:(转身吐血)你们还会改需求吗~
大小女儿:不会的

我知道,女生说不会,就是会!
于是我放弃了if…else的写法。
首先将备胎对象化是必须的。重要的是,给这些备胎串成一条链。每个节点,只要满足基本条件就返回给客户,否则往下传递,直到找到符合条件的备胎为止。
但,备胎的排序也是有条件的。大女儿说,最好有钱,那先将备胎们按身家排序,最有钱的排在链头,最穷的在链尾。小女儿的颜值要求也如法炮制。

用php简单实现的职责链demo

 

对了,后来过了几天,大女儿来找我了。
大女儿:foam,我觉得钱不是最重要的,身高才是
foam:我知道了,你等我几分钟
……

于是我这么改了下代码

 

她说以后不会再来麻烦我了,我点了点头~我知道的~
几天后,果然如我知道的那般
hey,foam,在吗

最后编辑:
作者:foam
foam
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。

9 加上 10 ?