服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - php设计模式 Chain Of Responsibility (职责链模式)

php设计模式 Chain Of Responsibility (职责链模式)

2019-12-01 12:39PHP教程网 PHP教程

为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它

代码如下:

<?php 
/** 
* 职责链模式 

* 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 

*/ 
abstract class Handler 

protected $_handler = null; 
public function setSuccessor($handler) 

$this->_handler = $handler; 

abstract function handleRequest($request); 

class ConcreteHandlerZero extends Handler 

public function handleRequest($request) 

if($request == 0) 

echo "0<br/>"; 
} else { 
$this->_handler->handleRequest($request); 



class ConcreteHandlerOdd extends Handler 

public function handleRequest($request) 

if($request % 2) 

echo $request." is odd<br/>"; 
} else { 
$this->_handler->handleRequest($request); 



class ConcreteHandlerEven extends Handler 

public function handleRequest($request) 

if(!($request % 2)) 

echo $request." is even<br/>"; 
} else { 
$this->_handler->handleRequest($request); 



// 实例一下 
$objZeroHander = new ConcreteHandlerZero(); 
$objEvenHander = new ConcreteHandlerEven(); 
$objOddHander = new ConcreteHandlerOdd(); 
$objZeroHander->setSuccessor($objEvenHander); 
$objEvenHander->setSuccessor($objOddHander); 
foreach(array(2,3,4,5,0) as $row) 

$objZeroHander->handleRequest($row); 

延伸 · 阅读

精彩推荐