初识PHP设计模式--职责链模式

职责链模式(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的金额


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值