责任链模式对有很多if else的场景也非常适合,在项目中比如 对一个商城中不同的会员等级做出不一样的处理,然后各个等级处理返回重组返回相同数据结构的数据即可。
生活中例子:比如你想请个假,需要你的主管同意,需要主管的上级同意,以此类推。
优点:各个节点责任明确,处理不了就继续找上一级,比如上面的例子如果主管的上级都处理不了(可能是某个副总),那直接找老板请假去!
备注:可以达到责任解耦;可拓展性强(对处理不了的事问上一级,在代码中的实现就是增加一个处理类即可);客户端调用无感知(比如客户让你写个合同,是要你写的,但是你处理不了,继续问你的上级请求他处理,以此类推;但是对客户来说,客户是无感知的,只要写合同这件事处理好就行,客户不管你公司是如何写处理的!)
<?php
abstract class Handler {
protected $higher = null;
abstract public function operation($lev);
}
// 主管处理类
class Zhuguan extends Handler {
protected $higher = "Fuzong"; //标识:主管的上级类名称
public function operation($lev)
{
if ($lev <= 1) {
echo "主管就可以搞定!";// TODO: Implement operation() method.
} else {
//主管处理不了,请求某副总处理
$higher = $this->higher;
$this->higher = new $higher();
$this->higher->operation($lev);
}
}
}
// 副总处理类
class Fuzong extends Handler {
protected $higher = "Boss"; //标识:副总的上级类名称
public function operation($lev)
{
if ($lev <= 50) {
echo "副总就可以搞定"; // TODO: Implement operation() method.
} else {
echo "副总处理不了;继续请求上级处理";
}
}
}
//如果需要拓展⏬即可
//老板处理类
//合伙人处理类
//客户端调用;比如本人请假
$try = new Zhuguan();
$lev = rand(0, 100);
$try->operation($lev);