首页 > 代码库 > php实现设计模式之 职责链模式
php实现设计模式之 职责链模式
<?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 *抽象处理者角色:定义一个处理请求的接口,和一个后继连接(可选)具体处理者角色:处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者。客户类:向一个链上的具体处理者ConcreteHandler对象提交请求。* */ /*职责链模式相对来说是比较灵活的,链可以设置成直,环形均可 * * 还有纯的责任链,不纯的责任链 *///抽象处理者角色,一般包含两个方法:处理请求,为请求设置继任者abstract class Handler{ public $next_handler; public function setNextHandler($handler){ $this->next_handler = $handler; } abstract public function executeRequest($request);} //具体的处理者,如果能处理,自己处理,不能处理,留给下一个继任者class Leader extends Handler{ public function executeRequest($request){ if($request->days>0&&$request->days<=1){ echo ‘团队领导已经批准‘; }else{ $this->next_handler->executeRequest($request); } }}class Director extends Handler{ public function executeRequest($request){ if($request->days>1&&$request->days<=3){ echo ‘总监已经批准‘; }else{ $this->next_handler->executeRequest($request); } }}class Manager extends Handler{ public function executeRequest($request){ if($request->days>3){ echo ‘总经理已经批准‘; }else{ $this->next_handler->executeRequest($request); } }}//请求class Request{ public $days; public function __construct($days){ $this->days = $days; }}class Client{ public static function main1(){ //构造一个请求,三个处理角色 $request = new Request(2); $leadler = new Leader(); $director = new Director(); $manager = new Manager(); //把三者组成链 $leadler->setNextHandler($director); $director->setNextHandler($manager); //链头发出请求 $leadler->executeRequest($request); } public function main2(){ $request = new Request(2); $leadler = new Leader(); $director = new Director(); $manager = new Manager(); //构成了一个环形链子,谁都可以是接受者 $leadler->setNextHandler($director); $director->setNextHandler($manager); $manager->setNextHandler($leadler); $manager->executeRequest($request); }}Client::main2();?>
UML类图如下:
php实现设计模式之 职责链模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。