## 6-1 适配器模式
### 第一步:定义一个接口
*D:\wamp\www\demo\oop\framework\Think\IDatabase.php*
~~~
<?php
namespace Think;
// 定义一个数据库的适配器接口类
interface IDatabase
{
function connect($host, $user, $passwd, $dbname);
function query($sql);
function close();
}
~~~
### 第二步:创建3个数据库的操作类
接下来,我们分别实现上面的操作类,继承同一个适配器接口,使用一致的操作数据库方法。
**分别实现3种数据库的操作**
*D:\wamp\www\demo\oop\framework\Think\Database\MySQL.php*
~~~
<?php
namespace Think\Database;
use Think\IDatabase;
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)
{
$ret = mysql_query($sql, $this->conn);
return $ret;
}
function close()
{
mysql_close($this->conn);
}
}
~~~
*D:\wamp\www\demo\oop\framework\Think\Database\MySQLi.php*
~~~
<?php
namespace Think\Database;
use Think\IDatabase;
class MySQLi implements IDatabase
{
protected $conn;
function connect($host, $user, $passwd, $dbname)
{
$conn = mysqli_connect($host, $user, $passwd, $dbname);
$this->conn = $conn;
}
function query($sql)
{
$res = mysqli_query($this->conn, $sql);
return $res;
}
function close()
{
mysqli_close($this->conn);
}
}
~~~
*D:\wamp\www\demo\oop\framework\Think\Database\PDO.php*
~~~
<?php
namespace Think\Database;
use Think\IDatabase;
class PDO implements IDatabase
{
function connect($host, $user, $passwd, $dbname)
{
$conn = new \PDO("mysql:host={$host}; dbname={$dbname}", $user, $passwd);
$this->conn = $conn;
}
function query($sql)
{
return $this->conn->query($sql);
}
function close()
{
unset($this->conn);
}
}
~~~
### 第三步:入口文件中,使用适配器模式实现数据库的操作
*D:\wamp\www\demo\oop\framework\index.php*
~~~
<?php
// 入口文件
define('BASEDIR', __DIR__);
include BASEDIR . '/Think/Loder.php';
spl_autoload_register('\\Think\\Loder::autoload');
$db = new Think\Database\MySQLi();
$db->connect('localhost', 'root', 'root', 'demo');
$ret = $db->query('show databases');
$db->close();
var_dump($ret);
~~~
以上所述,我们使用适配器模式定义了一个接口,然后实现了3种数据库的操作模式分别继承这个接口,实现特定的3种方法。
最终,会大大的方便我们随时切换数据库的类型。
比如:
~~~
$db = new Think\Database\MySQL();
$db = new Think\Database\MySQLi();
$db = new Think\Database\PDO();
~~~
- 序言
- 第1章 课程简介
- 1-1 大话PHP设计模式课程简介
- 第2章 开发环境准备
- 2-1 关于PHPStorm使用
- 2-2 关于编程字体选择
- 2-3 关于运行环境搭建
- 第3章 命名空间与Autoload
- 3-1 关于命名空间
- 3-2 类自动载入
- 3-3 开发一个PSR-0的基础框架
- 第4章 PHP面向对象
- 4-1 SPL标准库简介
- 4-2 PHP链式操作的实现
- 4-3 PHP魔术方法的使用
- 第5章 三种基础设计模式
- 5-1 工厂模式
- 5-2 单例模式
- 5-3 注册树模式
- 第6章 适配器模式
- 6-1 适配器模式
- 第7章 策略模式
- 7-1 策略模式的实现和使用
- 7-2 策略模式的控制反转
- 第8章 数据对象映射模式
- 8-1 数据对象映射模式之简单案例实现
- 8-2 数据对象映射模式之复杂案例实现
- 第9章 观察者模式
- 第10章 原型模式
- 第11章 装饰器模式
- 第12章 迭代器模式
- 第13章 代理模式
- 第14章 综合实战
- 14-1 面向对象设计基本原则
- 14-2 MVC结构
- 14-3 自动加载配置
- 14-4 从配置中生成数据库连接
- 14-5 装饰器模式在MVC中的使用
- 14-6 观察者模式在MVC程序中的使用
- 14-7 代理模式在MVC程序中的使用
- 14-8 课程小结