美文网首页
设计模式 || 职责链

设计模式 || 职责链

作者: hdormy | 来源:发表于2022-01-12 18:24 被阅读0次

“我要涨工资!!”

“好,那你打份申请表吧:涨50让你主管签个字,涨500让你主管和部门经理签字,涨5000让你主管和部门经理和人事经理签字,涨50000,你就让你主管和部门经理和人事经理和老板签字,如果没批准,你这个牛宝宝就翻滚吧!”

于是,你就抱着申请单,去找主管、找部门经理、找人事经理、找老板……

停!何须如此麻烦,责任链,上!

不管是主管,还是部门经理、人事经理甚至老板,他们在我这里,就只是两个字:领导!

抽象它!


abstract class Leader{}


而此刻,他们对我来说,都只有一个作用:签字!

给他统一个名字:


abstract class Leader{

             abstract   public function singleup();//抽象类,必须有一个抽象方法

}



上面的这个接口(interface定义的都是抽象类),你看它是不是只有个名字?领导这个词是不是很宽呀?接下来,我们就将它具象化:


//引入接口就省略了哈

class 主管 extends Leader{

            public function singleup($money){

                       if ($money <= 50){

                                   return "批准啦!";

                        }else{

                                   echo "组长批准,但还需要部门经理批准!";

                                   return $this->Leader->singleup();

                        }

             }

}

class  部门经理 implement Leader{

            public function singleup($money){

                         if ($money <= 500){

                                        return "批准啦!";

                        }else{

                                           echo "部门经理批准,但还需要人事经理批准!";

                                            return $this->Leader->singleup();

                        }

            }

}

class  人事经理 implement Leader{

            public function singleup($money){

                         if ($money <= 5000){

                                        return "批准啦!";

                        }else{

                                           echo "人事经理批准,但还需要老板批准!";

                                            return $this->Leader->singleup();

                        }

            }

}

class  老板 implement Leader{

            public function singleup($money){

                        echo "牛宝宝,你跑快点,梦想在外面!";

            }

}


问题来了,这不还是得自己一个一个领导跑嘛?

别急,给领导们都加一个空间传送阵!让超出范围的审批自动传送到上级领导那去!


abstract class Leader{

                protected $leader;

                abstract public function singleup();//抽象类,必须有一个抽象方法

                public function setLeader($leader) {//如果自己权限不够,就传送给上级领导

                            $this->leader=$leader;

                }

}


激动激动,我好想找老板签字~~赶紧准备申请书!


//实例化每个领导

$zhuguan = new 主管();

$bumenjingli = new 部门经理();

$renshijingli = new 人事经理();

$laoban = new 老板();

//准备好传送流程

$zhuguan ->setLeader($bumenjingli );

$bumenjingli ->setLeader($renshijingli );

$renshijingli ->setLeader($laoban );

我要涨50000!

$zhuguan ->singup(50000);

你猜输出什么?我猜:

组长批准,但还需要部门经理批准!

部门经理批准,但还需要人事经理批准!

人事经理批准,但还需要老板批准!

牛宝宝,你跑快点,梦想在外面!

啊哦~一下回到解放前,所以咱还是低调点,嘻嘻~

作者言:每一个设计模式的使用都不是固定的,需要根据自己的具体业务做适当的修改。

相关文章

  • 设计模式-工具链模式和迭代器模式

    设计模式-职责链模式和迭代器模式 1.职责链模式 设计动机客户端发出一个请求,职责链上的对象都可以处理这一请求,而...

  • Typescript 职责链模式(Chain of Respon

    标签: 前端 设计模式 职责链模式 typescript Chain of Responsibility 请仔细阅...

  • 设计模式值职责链模式(行为型)

    [TOC] 一、行为型模式 介绍职责链模式之前先介绍一下行为型设计模式,因为按照GoF模式分类,职责链就是一种行为...

  • iOS面试之设计模式模块

    设计模式 设计模式内容如下: 责任链模式 桥接模式 命令模式 适配器模式 单例模式 等等 设计原则 单一职责原则 ...

  • Java设计模式系列-责任链模式

    原创文章,转载请标注出处:《Java设计模式系列-责任链模式》 一、概述 职责链模式(称责任链模式)将请求的处理对...

  • 职责链设计模式

    概述 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用...

  • 设计模式 || 职责链

    “我要涨工资!!” “好,那你打份申请表吧:涨50让你主管签个字,涨500让你主管和部门经理签字,涨5000让你主...

  • 设计模式-职责链

    说起职责链模式,其实非常像AOP[https://baike.baidu.com/item/AOP/1332219...

  • 设计模式——职责链模式

    一. 概述 一. 概述 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,...

  • 设计模式——职责链模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

网友评论

      本文标题:设计模式 || 职责链

      本文链接:https://www.haomeiwen.com/subject/wgzbcrtx.html