zoukankan      html  css  js  c++  java
  • php适配器模式

       适配器的使用将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作,主要应用在第三方api的适配和多个类库的选择适配到我们的应用的接口规则。

    例子 

    /**
     * 普通媒体接口
     */
    
    interface MediaInterface
    {
      public function play($file='');
    }
    
    
    /**
     * 音频设备实体
     */
    class AudioPlayer implements MediaInterface
    {
      public function play($file='', $type='')
      {
        switch ($type) {
          case 'mp3':
            echo 'playing file: ' . $file . ".mp3
    ";
            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;
        }
    
      }
    }
    
    
    
    /**
     * 高级媒体接口
     */
    interface MediaAdvanceInterface
    {
      public function playMp4($file='');
      public function playWma($file='');
    }
    
    
    
    /**
     * mp4高级播放器实体
     */
    class AdvanceMp4Player implements MediaAdvanceInterface
    {
      public function playMp4($file='')
      {
          echo 'AdvanceMp4Player driver playing file: ' . $file . ".mp4
    ";
      }
    
      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
    ";
      }
    }
    
    /**
     * 高级播放器适配器
     */
    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;
        }
      }
    }

       

  • 相关阅读:
    重温CLR(七 ) 属性和事件
    重温CLR(六)方法和参数
    KMP算法
    Webstorm 2019最新激活码
    bash: cd: too many arguments 报错
    mongoDB线上数据库连接报错记录
    常见的 eslint 基本报错信息
    git 查看项目代码统计命令
    npm 删除指定的某个包以及再次安装
    vue.config.js常用配置
  • 原文地址:https://www.cnblogs.com/hellohell/p/9092776.html
Copyright © 2011-2022 走看看