PHP与设计模式:责任链模式详解与实战
PHP与设计模式:责任链模式详解与实战
在软件开发中,处理请求的逻辑往往由多个模块组成,如果将这些模块硬编码在一起会导致代码耦合度高,扩展性差。责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过将请求沿着链传递,使多个对象有机会对其进行处理,从而实现请求处理逻辑的解耦。
1. 什么是责任链模式?
- 定义
责任链模式(Chain of Responsibility)是一种行为型设计模式,它允许对象在链上依次处理请求,用户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递,从而避免了请求发送者和接收者之间的直接耦合。具体来说,当一个请求进入责任链时,每个对象都有机会对该请求进行处理,如果当前对象无法处理该请求,则将其传递给下一个对象,直到找到能够处理请求的对象为止。 - 特点
职责分离:每个处理器只负责处理自己职责范围内的请求。
动态组合:可以动态调整链条上的处理器顺序或数量。
请求传递:请求可以从链头依次传递到链尾,直到被处理。 - 适用场景
需要按照顺序处理请求的场景(如日志记录、权限校验)。
有多个对象可以处理同一请求,且具体处理者在运行时决定。
希望通过扩展处理器而非修改代码来增加功能。
2. 责任链模式的结构
责任链模式由以下组件组成:
1.处理器接口(Handler):定义处理请求的方法,并维护对下一个处理器的引用。
2.具体处理器(ConcreteHandler):实现处理逻辑,可选择将请求传递给下一个处理器。
3.客户端(Client):创建处理链并发送请求。
3. PHP实现责任链模式
以下是完整的PHP代码示例:
<?php
/**
* 责任连模式
*/
/**
* 骂人言论
*/
class Level_1 {
protected $level = 1;
protected $nextLevel = 'Level_2';
public function process ($level) {
if ($level <= $this->level) {
echo "删帖";
} else {
$process = new $this->nextLevel();
$process->process($level);
}
}
}
/**
* 色情言论
*/
class Level_2 {
protected $level = 2;
protected $nextLevel = 'Level_3';
public function process ($level) {
if ($level <= $this->level) {
echo "禁言";
} else {
$process = new $this->nextLevel();
$process->process($level);
}
}
}
/**
* 反动言论
*/
class Level_3 {
protected $level = 3;
protected $nextLevel = null;
public function process ($level) {
if ($level <= $this->level) {
echo "封号";
}
}
}
class Jubao {
public function jubao ($level) {
$obj = new Level_1();
$obj->process ($level);
}
}
$jubao = new Jubao();
$jubao->jubao(1);