設(shè)計(jì)模式(十一):適配器模式

轉(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();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容