简单介绍PHP的责任链编程模式 |
|
本文标签:PHP,责任链 概述 责任链模式的定义 责任链模式涉及到的角色如下: 抽象处理者(Handler)角色:定义出一个处理请求的接口 。如果需要,接口可以定义出一个方法以设定和返回对下家的引用 。这个角色通常由一个php的抽象类或接口实现 。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作
<?php
/**
* 抽象处理者角色
* @author wzy
*
*/
abstract class Handle
{
/**
* 持有后继的责任对象
*
* @var object
*/
protected $successor;
/**
* 示意处理请求的方法,虽然这个示意方法是没有传入参素的
* 但实际是可以传入参数的,根据具体需要来选择是否传递参数
*/
public abstract function handleRequest ();
/**
* 取值方法
*
* @return object
*/
public function getSuccessor ()
{
return $this->successor;
}
/**
* 赋值方法,设置后继的责任对象
*
* @param object $objsuccessor
*/
public function setSuccessor ($objsuccessor)
{
$this->successor = $objsuccessor;
}
}
/**
* 具体处理者角色
*
* @author wzy
*
*/
class ConcreateHandler extends Handle
{
/**
* 判断是否有后继的责任对象
* 如果有,就转发请求给后继的责任对象
* 如果没有,则处理请求
*
* @see Handle::handleRequest()
*/
public function handleRequest ()
{
if ($this->getSuccessor() != null) {
echo "放过请求,将请求转发给后继的责任对象!<br>";
$this->getSuccessor()->handleRequest();
} else {
echo "处理请求,处理过程省略...<br>";
}
}
}
/**
* 客户端代码
*/
// 组装责任链
$handle1 = new ConcreateHandler();
$handle2 = new ConcreateHandler();
$handle1->setSuccessor($handle2);
// 提交请求
$handle1->handleRequest();
?>
|