设计模式---适配器模式

应用:数据库适配器

1、定义一个统一方法的数据库接口(目标接口/目标抽象类)

interface IDatabase
{
    // 数据库连接
    function connect($host, $user, $passwd, $dbname);
    // 执行sql
    function query($sql);
    // 关闭数据库连接
    function close();
}

2、单个数据库类定义
(1) MySQL (mysql数据库操作适配器类)

  • 类文件
class MySQL implements IDatabase
{
    protected $conn;
    function connect($host, $user, $passwd, $dbname)
    {
        $conn = mysql_connect($host, $user, $passwd);
        mysql_select_db($dbname, $conn);
        $this->conn = $conn;
    }
    
    function query($sql)
    {
        return mysql_query($sql, $this->conn);
    }
    
    function close() 
    {
        mysql_close($this->conn);
    }
}
  • 单一调用
$db = new MySQL();
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query('show databases');
$db->close();

(2) MySQLi (mysqli数据库操作适配器类)

  • 类文件定义
class MySQL implements IDatabase
{
    protected $conn;
    function connect($host, $user, $passwd, $dbname)
    {
        $conn = mysqli_connect($host, $user, $passwd,  $dbname);
        $this->conn = $conn;
    }
    
    function query($sql)
    {
        return mysqli_connect($this->conn, $sql);
    }
    
    function close() 
    {
        mysql_close($this->conn);
    }
}

(3) PDO (PDO数据库操作适配器类)

  • 类文件定义
class PDO implements IDatabase
{
    protected $conn;
    function connect($host, $user, $passwd, $dbname)
    {
        $conn = new \PDO("mysql:host={$host};dbname={$dbname}",$username, $password);
        $this->conn = $conn;
    }
    
    function query($sql)
    {
        return $this->conn->query($sql);
    }
    
    function close() 
    {
        unset($this->conn);
    }
}

3、理解

多个类文件定义完成后,需要使用数据库的时候,直接通过类名切换实现不同数据库类的调用

mysql、mysqli、PDO数据库操作类本身的库为适配者

被实现的接口为目标接口

封装的三个数据库操作类为三个适配器

$db = new MySQL();
//$db = new MySQLi();
//$db = new PDO();
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query('show databases');
$db->close();

适配器模式介绍

定义

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

posted @ 2019-04-25 21:41  程序小工  阅读(170)  评论(0编辑  收藏  举报