将一个类的接口转换为用户期望的另外一个接口.适配器使得原本由于接口不兼容而不能一起工作的类可以一起工作
UML:

一.类适配器:
class A
{
public function methodA()
{
..............
}
}
class Adapter extends A
{
private $objectA;
public function methodB()
{
echo 'Append data';
}
}
调用:
$a = new Adapter();
$a->methodA();
$a->methodB();
二.对象适配器:
const HOST = '127.0.0.1';
const USER = 'root';
const PASSWORD = 'root';
const DB_NAME = 'test';
interface Db
{
public function connect();
public function select($sql);
}
class MysqlDb implements Db
{
protected $conn;
public function connect()
{
$this->conn = mysql_connect(HOST, USER, PASSWORD);
mysql_select_db(DB_NAME, $this->conn);
}
public function select($sql)
{
$res = mysql_query($sql, $this->conn);
$data = array();
while ($row = mysql_fetch_assoc($res)) {
$data[] = $row;
}
return $data;
}
}
class MysqliDb implements Db
{
protected $conn;
public function connect()
{
$this->conn = mysqli_connect(HOST, USER, PASSWORD);
mysqli_select_db($this->conn, DB_NAME);
}
public function select($sql)
{
$res = mysqli_query($this->conn, $sql);
$data = array();
while ($row = mysqli_fetch_assoc($res)) {
$data[] = $row;
}
return $data;
}
}
class DbAdapter
{
const MYSQL = 'MysqlDb';
const MYSQLI = 'MysqliDb';
protected $db;
public function __construct($type)
{
$this->db = new $type();
}
public function connectDb()
{
$this->db->connect();
}
public function select($sql)
{
return $this->db->select($sql);
}
}
$db = new DbAdapter(DbAdapter::MYSQLI);
$db->connectDb();
var_dump($db->select("select * from test"));
三.接口适配器
要求现有类ExistClass适配接口DemoInterface
现有类:
class ExistClass
{
}
interface DemoInterface
{
public function method();
}
// 适配的新类
class NewClass extends ExistClass implements DemoInterface
{
public function method()
{
// TODO: Implement method() method.
}
}