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

<?php
namespace adapter;

/**
* 高级媒体接口
*/
interface MediaAdvanceInterface
{
public function playMp4($file='');
public function playWma($file='');
}
<?php
namespace adapter;

/**
* mp4高级播放器实体
*/
class AdvanceMp4Player implements MediaAdvanceInterface
{
public function playMp4($file='')
{
echo 'AdvanceMp4Player driver playing file: ' . $file . ".mp4\n";
}

public function playWma($file='')
{
//do nothing
}
}
<?php
namespace adapter;

/**
* wma高级播放器实体
*/
class AdvanceWmaPlayer implements MediaAdvanceInterface
{
public function playMp4($file='')
{
//do nothing
}

public function playWma($file='')
{
echo 'AdvanceWmaPlayer driver playing file: ' . $file . ".wma\n";
}
}
<?php
namespace adapter;

use Exception;

/**
* 高级播放器适配器
*/
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;
}
}
}
<?php
namespace adapter;

/**
* 普通媒体接口
*/

interface MediaInterface
{
public function play($file='');
}
<?php
namespace adapter;

use Exception;

/**
* 音频设备实体
*/
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;
}

}
}
<?php
/**
* 结构型模式
*
* php适配器模式
* 把实现了不同接口的对象通过适配器的方式组合起来放在一个新的环境
*
*
* @example 运行 php test.php
*/


// 注册自加载
spl_autoload_register('autoload');

function autoload($class)
{
require dirname($_SERVER['SCRIPT_FILENAME']) . '//..//' . str_replace('\\', '/', $class) . '.php';
}

/************************************* test *************************************/

use adapter\AudioPlayer;

try {
//生产一台设备
$mp4 = new AudioPlayer();
// 播放一个mp3
$mp4->play('忍者', 'mp3');
// 播放一个wma
$mp4->play('彩虹', 'wma');
// 播放一个mp4
$mp4->play('龙卷风mv', 'mp4');
} catch (\Exception $e) {
echo $e->getMessage();
}