职责链模式属于行为型模式
概述:为解除请求的发送者和接收者之间的耦合, 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它, 而使用多个对象都用机会处理这个请求
<?php
/**
*职责链抽象类
*/
abstract class Chain{
public $chain;
public function setChain($chain){
$this->chain = $chain;
}
public function handleRequest($request){}
}
<?php
/**
*职责链一号
*计算值是否为0
*/
class ChainZero extends Chain{
public function handleRequest($num){
if($num == 0){
echo ‘此数为0 职责链停止<br/>’;
}else{
echo ‘zero<br/>’;
$this->chain->handleRequest($num);
}
}
}
<?php
/**
*职责链一号
*计算值是否为奇数
*/
class ChainEven extends Chain{
public function handleRequest($num){
if($num%2 == 1){
echo ‘此数为奇数 职责链停止<br/>’;
}else{
echo ‘even<br/>’;
$this->chain->handleRequest($num);
}
}
}
<?php
/**
*职责链一号
*计算值是否为偶数
*/
class ChainOdd extends Chain{
public function handleRequest($num){
if($num%2 != 1){
echo ‘此数为偶数 职责链停止<br/>’;
}else{
echo ‘odd<br/>’;
$this->chain->handleRequest($num);
}
}
}
<?php
/**
*职责链模式
*/
public function actionChain(){
Yii::import(‘ext.chain.*’);
$chainZero = new ChainZero();
$chainEven = new ChainEven();
$chainOdd = new ChainOdd();
$chainZero->setChain($chainEven);
$chainEven->setChain($chainOdd);
foreach(array(2,3,4,5,0) as $num)
{
$chainZero->handleRequest($num);
}
}