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
- PHP设计模式系列(十九):职责链模式
- Java设计模式之十九(职责链模式)
- java设计模式系列--职责链模式
- 设计模式(13)--职责链模式
- 设计模式系列随笔- Chain Of Responsibility 职责链模式
- 设计模式系列之九:职责链模式
- 职责链设计模式
- 【设计模式】职责链
- 设计模式---职责链
- 职责链设计模式
- 职责链设计模式
- 设计模式学习笔记(十九)—Chain of Responsibility职责链模式
- 设计模式学习笔记(十九)—Chain of Responsibility职责链模式
- 设计模式---职责链模式
- 设计模式-职责链模式
- 设计模式 职责链模式
- 设计模式- 职责链模式
- 设计模式 - 职责链模式
- 虚数与复数及其简单应用
- hdu 2546 饭卡
- Android 播放网络视频
- php-素数
- vagrant 的安装与使用
- PHP设计模式系列(十九):职责链模式
- 序列变换
- android图片压缩的三种方式
- 二次方程求解
- HTML5复习 (8)
- poj 1163 dp 走三角形取路径的最大值
- c++蛮力法求最近对问题
- JDBC基础-实现数据简单遍历
- HUST1349 Signal Beacon【单调栈+线段树DP】