职责链模式(Responsibility)属于行为型模型,还是比较好理解,就是对于某个请求,一级不能处理就转到二级处理。
生活中用的最普遍的例子就是,公司申请拨款,一万左右的经费,经理可以批准通过,但是达到十万左右的经理就没有权限审批了,需要转交到总监那里去审批,这就是一条职责链。
输出结果:
生活中用的最普遍的例子就是,公司申请拨款,一万左右的经费,经理可以批准通过,但是达到十万左右的经理就没有权限审批了,需要转交到总监那里去审批,这就是一条职责链。
这样系统可以在不影响客户端的情况下,对责任进行动态的分配。
<?php
// 请求类
Class Request
{
/**
* 请求金额
* @var string
*/
public $request_money;
}
// 抽象管理者
abstract Class Manager
{
/**
* 请求金额
* @var string
*/
protected $name;
/**
* 管理者
* @var object
*/
protected $manager;
/**
* 构造函数
* @access public
* @param string $_name 领导姓名
*/
public function __construct($_name){
$this->name = $_name;
}
/**
* 设置传递上级领导
* @access public
* @param object $_name 上级领导姓名
*/
public function setLeader(Manager $_mana){
$this->manager = $_mana;
}
/**
* 申请方法
* @access public
* @param object $_req 金额
*/
abstract public function Apply(Request $_req);
}
// 朱主任的权限类
Class Director extends Manager
{
/**
* 构造函数
* @access public
* @param string $_name 朱主任
*/
public function __construct($_name){
parent::__construct($_name);
}
/**
* 申请方法
* @access public
* @param object $_req 金额
*/
public function Apply(Request $_req){
// var_dump($this->name);
if($_req->money <= 3000){
echo $this->name.":批准了".$_req->money."的金额";
}
else
{
if(isset($this->manager))
{
$this->manager->Apply($_req);
}
}
}
}
// 田经理的权限类
Class Amaldar extends Manager
{
/**
* 构造函数
* @access public
* @param string $_name 田经理
*/
public function __construct($_name){
parent::__construct($_name);
}
/**
* 申请方法
* @access public
* @param object $_req 金额
*/
public function Apply(Request $_req){
if($_req->money > 3000 && $_req->money <= 10000){
echo $this->name.":批准了".$_req->money."的金额";
}
else
{
if(isset($this->manager))
{
$this->manager->Apply($_req);
}
}
}
}
// 郑总监的权限类
Class Ceo extends Manager
{
/**
* 构造函数
* @access public
* @param string $_name 郑总监
*/
public function __construct($_name){
parent::__construct($_name);
}
/**
* 申请方法
* @access public
* @param object $_req 金额
*/
public function Apply(Request $_req){
if($_req->money > 10000){
echo $this->name.":批准了".$_req->money."的金额";
}
}
}
<?php
header("Content-Type:text/html;charset=utf-8");
echo "<pre>";
//--------------------职责链模式----------------------
require_once "Responsibility.php";
// 创建各领导对象
$director = new Director("朱主任");
$amaldar = new Amaldar("田经理");
$ceo = new Ceo("郑总监");
// 设置上级领导
$director -> setLeader($amaldar);
$amaldar -> setLeader($ceo);
// 请求类
$req = new Request();
// 审批金额为3000
// $req->money = "3000";
// 审批金额为10000
$req->money = "10000";
// 审批金额为20000
// $req->money = "20000";
// 提交申请
$director->Apply($req);
输出结果:
田经理:批准了10000的金额