美文网首页
PHP设计模式-配制器

PHP设计模式-配制器

作者: 木有sky | 来源:发表于2019-02-17 10:08 被阅读0次

适用性

把实现了不同接口的对象通过适配器的方式组合起来放在一个新的环境

代码示例

/**

* 普通媒体接口

*/

interface MediaInterface

{

    public function play($file='');

}

/**

* 高级媒体接口

*/

interface MediaAdvanceInterface

{

    public function playMp4($file='');

    public function playWma($file='');

}

/**

* 高级播放器适配器

*/

class Adapter

{

    private $_advancePlayerInstance;

    private $_type = '';

    public function __construct($type='')

    {

        switch ($type) {

            case 'mp4':

                $this->_advancePlayerInstance = new AdvanceMp4Player();

                break;

            case 'wma':

                $this->_advancePlayerInstance = new AdvanceWmaPlayer();

                break;

            default:

                throw new Exception("$type is not supported", 400);

                break;

        }

        $this->_type = $type;

    }

    public function play($file='')

    {

        switch ($this->_type) {

            case 'mp4':

                $this->_advancePlayerInstance->playMp4($file);

                break;

            case 'wma':

                $this->_advancePlayerInstance->playWma($file);

                break;

            default:

                break;

        }

    }

}

/**

* mp4高级播放器实体

*/

class AdvanceMp4Player implements MediaAdvanceInterface

{

    public function playMp4($file='')

    {

        echo 'AdvanceMp4Player driver playing file: ' . $file . ".mp4\n";

    }

    public function playWma($file='')

    {

        //do nothing

    }

}

/**

* wma高级播放器实体

*/

class AdvanceWmaPlayer implements MediaAdvanceInterface

{

    public function playMp4($file='')

    {

        //do nothing

    }

    public function playWma($file='')

    {

        echo 'AdvanceWmaPlayer driver playing file: ' . $file . ".wma\n";

    }

}

/**

* 音频设备实体

*/

class AudioPlayer implements MediaInterface

{

    public function play($file='', $type='')

    {

        switch ($type) {

            case 'mp3':

                echo 'playing file: ' . $file . ".mp3\n";

                break;

            case 'mp4':

                $adapter = new Adapter($type);

                $adapter->play($file);

                break;

            case 'wma':

                $adapter = new Adapter($type);

                $adapter->play($file);

                break;

            default:

                throw new Exception("$type is not supported", 400);

                break;

        }

    }

}

try {

    //生产一台设备

    $mp4 = new AudioPlayer();

    // 播放一个mp3

    $mp4->play('忍者', 'mp3');

    // 播放一个wma

    $mp4->play('彩虹', 'wma');

    // 播放一个mp4

    $mp4->play('龙卷风mv', 'mp4');

} catch (\Exception $e) {

    echo $e->getMessage();

}

相关文章

网友评论

      本文标题:PHP设计模式-配制器

      本文链接:https://www.haomeiwen.com/subject/wurieqtx.html