【PHP-设计模式】职责链模式
【摘要】
author:咔咔
WeChat:fangkangfk
什么是职责链模式:
职责链模式是包含了一些命令对象和一些处理对象,每个处理对象决定他能处理的那些命令对象,它也知道把自己不能处理的命令对象移交给下一个处理对象
白话解释: 这个案例一共三个职位,是经理,总监,总经理,职位就类似命令对象,请假这件事就类似命令对象,当经...
author:咔咔
WeChat:fangkangfk
什么是职责链模式:
职责链模式是包含了一些命令对象和一些处理对象,每个处理对象决定他能处理的那些命令对象,它也知道把自己不能处理的命令对象移交给下一个处理对象
白话解释:
这个案例一共三个职位,是经理,总监,总经理,职位就类似命令对象,请假这件事就类似命令对象,当经理处理不了的事情就需要移交给总监,总监处理的不了的事情就需要移交给总经理,这也就是我们的职责链模式
下来我们分段来解释这个案例
首先这个案例分为三部分第一部分是声明的属性,第二部分是抽象类里边设置上下级关系,抽象方法,第三部分就是业务方面的代码
在抽象类manage这个类中apply抽象方法中注入了request这个类
当请假数量大于2的时候经理的职权就不够了,这个时候就会走apply这个方法,this->manage这个属性是获取的对应职位的上级的类,然后在调用自己的处理函数方法完成逻辑处理,如还没有权限则继续追寻上级,直到权限满足返回处理结果即可
-
<?php
-
/**
-
* Created by PhpStorm.
-
* User: Administrator
-
* Date: 2018/11/26
-
* Time: 14:04
-
*/
-
//申请Model
-
class Request
-
{
-
//数量
-
public $num;
-
//申请类型
-
public $requestType;
-
//申请内容
-
public $requestContent;
-
}
-
-
//抽象管理者
-
abstract class Manager
-
{
-
protected $name;
-
//管理者上级
-
protected $manager;
-
public function __construct($_name)
-
{
-
$this->name = $_name;
-
}
-
-
//设置管理者上级
-
public function SetHeader(Manager $_mana)
-
{
-
$this->manager = $_mana;
-
}
-
-
//申请请求
-
abstract public function Apply(Request $_req);
-
-
}
-
-
//经理
-
class CommonManager extends Manager
-
{
-
public function __construct($_name)
-
{
-
parent::__construct($_name);
-
}
-
public function Apply(Request $_req)
-
{
-
if($_req->requestType=="请假" && $_req->num<=2)
-
{
-
echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
-
}
-
else
-
{
-
if(isset($this->manager))
-
{
-
$this->manager->Apply($_req);
-
}
-
}
-
-
}
-
}
-
-
//总监
-
class MajorDomo extends Manager
-
{
-
public function __construct($_name)
-
{
-
parent::__construct($_name);
-
}
-
-
public function Apply(Request $_req)
-
{
-
if ($_req->requestType == "请假" && $_req->num <= 5)
-
{
-
echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
-
}
-
else
-
{
-
if (isset($this->manager))
-
{
-
$this->manager->Apply($_req);
-
}
-
}
-
-
}
-
}
-
-
-
//总经理
-
class GeneralManager extends Manager
-
{
-
public function __construct($_name)
-
{
-
parent::__construct($_name);
-
}
-
-
public function Apply(Request $_req)
-
{
-
if ($_req->requestType == "请假")
-
{
-
echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
-
}
-
else if($_req->requestType=="加薪" && $_req->num <= 500)
-
{
-
echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
-
}
-
else if($_req->requestType=="加薪" && $_req->num>500)
-
{
-
echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}再说吧。<br/>";
-
}
-
}
-
}
-
-
header("Content-Type:text/html;charset=utf-8");
-
//--------------------职责链模式----------------------
-
$jingli = new CommonManager("李经理");
-
$zongjian = new MajorDomo("郭总监");
-
$zongjingli = new GeneralManager("孙总");
-
-
//设置直接上级
-
$jingli->SetHeader($zongjian);
-
$zongjian->SetHeader($zongjingli);
-
-
//申请
-
$req1 = new Request();
-
$req1->requestType = "请假";
-
$req1->requestContent = "小菜请假!";
-
$req1->num = 20;
-
$jingli->Apply($req1);
-
-
-
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/84541431
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)