职责链模式

目录 设计模式

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

<?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);
    }
}

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注