zoukankan      html  css  js  c++  java
  • 【PHP设计模式 07_ZeRenLian.php】责任链模式

    <?php 
    /**
     * 【责任链模式】
     * 情景设置:根据不同的需求,去找相应级别的责任人解决问题
     */
    
    header("Content-type: text/html; charset=utf-8");
    
    /* 面向过程的方式解决这个问题 */
    if(isset($_POST['type1']) && !empty($_POST['type1'])){
        class Cun{
            public function process(){
                echo '去村委会,找村长解决问题。';
            }
        }
        class Zhen{
            public function process(){
                echo '去镇长办公室,找镇长解决问题。';
            }
        }
        class Xian{
            public function process(){
                echo '去县里,找县长解决问题';
            }
        }
        
        $type = $_POST['type1'];
        if($type == 1){
            $obj = new Cun();
        }elseif($type == 2){
            $obj = new Zhen();
        }elseif($type == 3){
            $obj = new Xian();
        }else{
            exit('错误的选项');
        }
        echo '(面向过程)';
        $obj->process();
    }
    
    /* 责任链模式 解决这个问题 */
    if(isset($_POST['type2']) && !empty($_POST['type2'])){
        class CunZ{
            protected $power = 1; //假设“村长”的能力级别=1
            protected $top = 'Zhenz'; //假设“村长”的上级是“ZhenZ”
            public function process($lev){
                //如果匹配则处理,否则去找上一级
                if($lev == $this->power){
                    echo '去村委会,找村长解决问题。';
                }else{
                    $top = new $this->top;
                    $top->process($lev);
                }
            }
        }
        
        class Zhenz{
            protected $power = 2; //假设“镇长”的能力级别=2
            protected $top = 'XianZ'; //假设“镇长”的上级是“XianZ”
            public function process($lev){
                //如果匹配则处理,否则去找上一级
                if($lev == $this->power){
                    echo '去镇长办公室,找镇长解决问题。';
                }else{
                    $top = new $this->top;
                    $top->process($lev);
                }
            }
        }
        
        class Xianz{
            protected $power = null; 
            protected $top = null; //假设“县长” 暂无上级
            public function process($lev){
                //因为没有了上级,所以直接处理
                echo '去县里,找县长解决问题';
            }
        }
        
        $type = $_POST['type2'];
        $obj = new CunZ();
        echo '(责任链)';
        $obj->process($type);
        
    }
    
    ?>
    
    <br><br><br><br>
    
    <form action="?" method="post">
    【面向过程】
    <select name="type1">
        <option value="1">家庭纠纷(找村长)</option>
        <option value="2">土地赔偿(找镇长)</option>
        <option value="3">户口问题(找县长)</option>
    </select>
    <button type="submit">提交</button>
    </form>
    
    <form action="?" method="post">
    【责任链模式】
    <select name="type2">
        <option value="1">家庭纠纷(找村长)</option>
        <option value="2">土地赔偿(找镇长)</option>
        <option value="3">户口问题(找县长)</option>
    </select>
    <button type="submit">提交</button>
    </form>
  • 相关阅读:
    向Sql Server数据库插入中文时显示乱码的解决办法 (转)
    自定义控件开发知识点
    Win7旗舰版中的IIS配置asp.net的运行环境
    windows使用
    Visual Studio 2012自动添加注释(如版权信息等)
    3个线程彼此通知
    多线程12_张孝祥 java5读写锁技术的妙用
    多线程11_张孝祥 java5的线程锁技术
    Spring整合hibernate4:事务管理[转]
    HTML界面JQuery ajax 返回200,但走Error方法
  • 原文地址:https://www.cnblogs.com/rxbook/p/6002988.html
Copyright © 2011-2022 走看看