适配器模式:将一个类的接口转换成外部希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作.适配器就是一个把拥有相似功能但是接口名不同的类封装成拥有同样接口名的类,这样只需要更改接口引入的类,但不需要改变类中的方法,就可以换成另一个相同功能不同类名和方法名.
如:数据库操作有MySQL,MySQLi,PDO三种
memcache,redis,file,apc等不同的缓存函数
步骤:
1.定义一个接口:规定方法与参数
2.有几个要实现的类,就写几个类继承该接口
接口 IDatabase
<?php
namespace Test;
interface IDatabase
{
function connect($host, $user, $passwd, $dbname);
function query($sql);
function close();
}
MySQL类
<?php
namespace Test\Database;
use Test\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)
{
$res = mysql_query($sql, $this->conn);
return $res;
}
function close()
{
mysql_close($this->conn);
}
}
MySQLi类
<?php
namespace Test\Database;
use Test\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)
{
return mysqli_query($this->conn, $sql);
}
function close()
{
mysqli_close($this->conn);
}
}
这样在之后的调用,只需要使用接口上规定的方法就行,可以在MYSQL和MYSQLi中简单互换,不需要改方法名和参数这些,实现了代码的解耦.