PHP设计模式系列(十九):职责链模式

来源:互联网 发布:电子商务一级域名 编辑:程序博客网 时间:2024/05/21 09:41

职责链模式

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

模式结构

  • 抽象处理者角色(Handler:Approver):定义一个处理请求的接口,和一个后继连接(可选)
  • 具体处理者角色(ConcreteHandler:President):处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者。

结构图

这里写图片描述

PHP代码实现

<?php/** * 职责链模式 *///抽象处理者角色(Handler:Approver)abstract class Handler{    public function SetSuccessor(Handler $successor){        $this->successor=$successor;    }    abstract public function HandleRequest($request);}//具体处理者角色(ConcreteHandler:President)class ConcreteHandle1 extends Handler{    public function HandleRequest($request)    {        if($request>=0&&$request<10){            var_dump(self::class.':'.$request);        }elseif ($this->successor!=null){            $this->successor->HandleRequest($request);        }    }}class ConcreteHandle2 extends Handler{    public function HandleRequest($request)    {        if($request>=10&&$request<20){            var_dump(self::class.':'.$request);        }elseif ($this->successor!=null){            $this->successor->HandleRequest($request);        }    }}class ConcreteHandle3 extends Handler{    public function HandleRequest($request)    {        if($request>=20&&$request<30){            var_dump(self::class.':'.$request);        }elseif ($this->successor!=null){            $this->successor->HandleRequest($request);        }    }}$h1=new ConcreteHandle1();$h2=new ConcreteHandle2();$h3=new ConcreteHandle3();$h1->SetSuccessor($h2);$h2->SetSuccessor($h3);$h1->HandleRequest(5);$h1->HandleRequest(15);$h1->HandleRequest(25);

运行结果

string 'ConcreteHandle1:5' (length=17)string 'ConcreteHandle2:15' (length=18)string 'ConcreteHandle3:25' (length=18)
1 0