zoukankan      html  css  js  c++  java
  • PHP设计模式系列

    • 委托模式

    通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。

    • 应用场景
    1. 设计了一个cd类,类中有mp3播放模式,和mp4播放模式
    2. 改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式
    3. 改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。
    • 代码:cd类,未改进之前,选择播放模式是一种痛苦的事情
        <?php  
        //委托模式-去除核心对象中的判决和复杂的功能性  
        //使用委托模式之前,调用cd类,选择cd播放模式是复杂的选择过程  
        class cd {  
            protected $cdInfo = array();   
              
            public function addSong($song) {  
                $this->cdInfo[$song] = $song;  
            }  
              
            public function playMp3($song) {  
                return $this->cdInfo[$song] . '.mp3';  
            }  
              
            public function playMp4($song) {  
                return $this->cdInfo[$song] . '.mp4';  
            }  
        }  
        $oldCd = new cd;  
        $oldCd->addSong("1");  
        $oldCd->addSong("2");  
        $oldCd->addSong("3");  
        $type = 'mp3';  
        if ($type == 'mp3') {  
            $oldCd->playMp3();  
        } else {  
            $oldCd->playMp4();  
        }  

    代码:通过委托模式,改进后的cd类

        <?php  
        //委托模式-去除核心对象中的判决和复杂的功能性  
        //改进cd类  
        class cdDelegate {  
            protected $cdInfo = array();   
              
            public function addSong($song) {  
                $this->cdInfo[$song] = $song;  
            }  
              
            public function play($type, $song) {  
                $obj = new $type;  
                return $obj->playList($this->cdInfo, $song);  
            }  
        }  
          
        class mp3 {  
            public function playList($list) {  
                return $list[$song];  
            }  
        }  
          
        class mp4 {  
            public function playList($list) {  
                return $list[$song];  
            }  
        }  
          
        $newCd = new cd;  
        $newCd->addSong("1");  
        $newCd->addSong("2");  
        $newCd->addSong("3");  
        $type = 'mp3';  
        $oldCd->play('mp3', '1'); //只要传递参数就能知道需要选择何种播放模式  

    转自:http://blog.csdn.net/initphp/article/details/7684476

  • 相关阅读:
    DataTabe使用Linq实现 Group
    通用化NPOI导出xls
    DosBox 的 DOSBOX.CONF 的详细配置说
    wx预览图片
    jqweui Picker使用一个小问题
    一个504错误原因
    DingDing的CorpSecretID和SSOSecret不是一个东西
    Android上禁止屏幕旋转
    Error:Failed to resolve: com.android.support:recyclerview-v7:26.1.0
    glide:4.7.1 与 26.1.0冲突
  • 原文地址:https://www.cnblogs.com/zhhtao/p/4414649.html
Copyright © 2011-2022 走看看