课程名称:大话PHP设计模式
课程章节:适配器模式
课程讲师:Rango
课程内容:
为什么要使用适配器模式
首先要来说适配器模式解决了什么问题,试想如下场景,php可以使用mysql库或者pdo库来操作数据库,但是有的人像用mysql,有的人想用pdo;
那么就可以定义一套同一的接口,分别实现mysql版本和pdo版本,然后由用户来选择使用哪一个
具体实现
注意这套代码仅展示功能,直接复制过去是不能运行的,你可能需要修改命名空间
- 首先定义一套接口
<?php
interface Database
{
public function connect($host, $user, $name, $dbname);
public function query($sql);
public function close();
}
- 然后实现用mysql库来实现接口
<?php
namespace Databasee;
class Mysql implements \Database
{
public function connect($host, $user, $name, $dbname)
{
// 这里写使用Mysql连接到数据库的具体实现代码
return '连接到数据库';
}
public function query($sql)
{
// 这里写使用Mysql进行数据库查询的具体实现代码
return "执行sql语句({$sql})";
}
public function close()
{
// 这里写关闭Mysql关闭数据库的具体实现代码
return '关闭数据库';
}
}
- 然后用pdo来实现接口
<?php
namespace Databasee;
class Pdo implements \Database
{
public function connect($host, $user, $name, $dbname)
{
// 这里写使用Pdo连接到数据库的具体实现代码
return '连接到数据库';
}
public function query($sql)
{
// 这里写使用Pdo进行数据库查询的具体实现代码
return "执行sql语句({$sql})";
}
public function close()
{
// 这里写关闭Pdo关闭数据库的具体实现代码
return '关闭数据库';
}
}
- 最后来使用自己写的mysql类和pdo类操作数据库
<?php
use Databasee\Mysql;
use Databasee\Pdo;
// 使用封装的Mysql类访问操作数据库
$obj = new Mysql();
echo $obj->connect('127.0.0.1', 'admin', 'admin', 'test');
echo $obj->query('select * from test');
echo $obj->close();
// 使用封装的Pdo类访问操作数据库
$obj = new Pdo();
echo $obj->connect('127.0.0.1', 'admin', 'admin', 'test');
echo $obj->query('select * from test');
echo $obj->close();
其它
适配器模式除了适合用在操作数据库上,还适合用在操作缓存上面,比如封装一个文件缓存、一个redis缓存、一个数据库缓存
课程收货
通过学习适配器模式,想到了在之前用过的tp框架中一些功能的实现,这套设计模式非常实用,可以把多种不统一的接口统一为一套接口。感谢rango老师的讲解。