轉(zhuǎn)載請(qǐng)注明作者和出處:http://www.itdecent.cn/p/c81e5d4fa5c2
運(yùn)行平臺(tái): Windows
php版本: php7.0
作者簡介: 一個(gè)本該成為游戲職業(yè)選手卻被編程耽誤的程序員
適配器模式(Adapter Pattern):將某個(gè)對(duì)象的接口適配為另一個(gè)對(duì)象所期望的接口。屬于結(jié)構(gòu)型設(shè)計(jì)模式。
我們常見的適配器模式就是數(shù)據(jù)庫操作,無論是mysql還是mysqli都是使用connet()連接,close()關(guān)閉,這就是適配器模式
//MySQL待操作適配類
class MySQLAdaptee implements Target
{
protected $conn; //用于存放數(shù)據(jù)庫連接句柄
//實(shí)現(xiàn)連接方法
public function connect($host, $user, $passwd, $dbname)
{
$conn = mysql_connect($host, $user, $passwd);
mysql_select_db($dbname, $conn);
$this->conn = $conn;
}
//查詢方法
public function query($sql)
{
$res = mysql_query($sql, $this->conn);
return $res;
}
//關(guān)閉方法
public function close()
{
mysql_close($this->conn);
}
}
//MySQLi操作待適配類
class MySQLiAdaptee
{
protected $conn;
public function connect($host, $user, $passwd, $dbname)
{
$conn = mysqli_connect($host, $user, $passwd, $dbname);
$this->conn = $conn;
}
public function query($sql)
{
return mysqli_query($this->conn, $sql);
}
public function close()
{
mysqli_close($this->conn);
}
}
//用戶所期待的接口
Interface Target{
public function connect($host, $user, $passwd, $dbname);
public function query($sql);
public function close();
}
//用戶期待適配類
Class DataBase implements Target {
protected $db ; //存放MySQLiAdapter對(duì)象或MySQLAdapter對(duì)象
public function __construct($type){
$type = $type."Adapter" ;
$this->db = new $type ;
}
public function connect($host, $user, $passwd, $dbname){
$this->db->connect($host, $user, $passwd, $dbname);
}
public function query($sql){
return $this->db->query($sql);
}
public function close(){
$this->db->close();
}
}
//用戶調(diào)用同一個(gè)接口,使用MySQL和mysqli這兩套不同示例。
$db1 = new DataBase('MySQL');
$db1->connect('127.0.0.1','root','1234','myDB');die;
$db1->query('select * from test');
$db1->close();
$db2 = new DataBase('MySQLi');
$db2->connect('127.0.0.1','root','1234','myDB');
$db2->query('select * from test');
$db2->close();