適配器模式痕慢,可以將截然不同的函數(shù)接口封裝成統(tǒng)一的API
例如尚揣,PHP的數(shù)據(jù)庫操作有mysql, mysqli, pdo 3種,可以用適配器模式統(tǒng)一成一致掖举。類似的情景還有caceh適配器快骗,將memcache, redis, file, apc等不同的緩存函數(shù)統(tǒng)一成一致。
//IDatabase.php 統(tǒng)一的接口
<?php
namespace App\Database;
interface IDatabase
{
function connect($host, $name, $password, $database);
function query($sql);
function close();
}
//MySQL.php MySQL類
<?php
namespace App\Database;
class MySQL implements IDatabase
{
protected $conn;
function connect($host, $name, $password, $database)
{
$conn = mysql_connect($host, $name, $password);
mysql_select_db($database, $conn);
$this->conn = $conn;
}
function query($sql)
{
return mysql_query($sql);
}
function close()
{
mysql_close($this->conn);
}
}
//MySQLi.php MySQLi類
<?php
namespace App\Database;
class MySQLi implements IDatabase
{
protected $conn;
function connect($host, $name, $password, $database)
{
$conn = mysqli_connect($host, $name, $password, $database);
return $this->conn = $conn;
}
function query($sql)
{
return mysqli_query($this->conn, $sql);
}
function close()
{
mysqli_close($this->conn);
}
}
//PDO.php PDO類
<?php
namespace App\Database;
class PDO implements IDatabase
{
protected $conn;
function connect($host, $name, $password, $database)
{
$dsn = "mysql:host=$host;dbname=$database";
$conn = new \PDO($dsn, $name, $password);
return $this->conn = $conn;
}
function query($sql)
{
return $this->conn->query($sql);
}
function close()
{
unset($this->conn);
}
}
//index.php 使用示例
<?php
use App\Database\MySQL;
$conn = new MySQL();
$conn->connect('127.0.0.1', 'root', '', 'test');
$res = $conn->query("show databases");
$conn->close();