课程名称:大话PHP设计模式
课程章节: 6-1适配器模式
主讲老师:Rango
课程内容
课程主要介绍了适配器的定义及其简单的实现案例,通过自我扩展,更加深入的了解其中的原理和优缺点。
课程收获
一、适配器模式定义
适配器模式(Adapter Pattern)将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器。
二、适配器模式结构
1.Target(目标抽象类)
目标抽象类定义客户要用的特定领域的接口,可以是个抽象类或接口,也可以是具体类;在类适配器中,由于php语句不支持多重继承,因此它只能是接口。
2.Adapter(适配器类)
适配器类可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器Adapter是适配器模式的核心,在类适配器模式中,它通过实现Target接口并继承Adaptee类来使两者产生联系;在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
3.Adaptee(适配者类)
适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配。适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下甚至没有是适配者类的源代码。
4.Client(客户类)
在客户类中针对目标抽象类进行编程,调用在目标抽象类中定义的业务方法。
三、优缺点
1.优点
将目标类和适配者类解耦,通过引入一个适配者类来重用现有的适配者类,而无须修改原有代码
增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
灵活性和扩展性都非常好,完全符合“开闭原则”。
类适配器的优点:由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
对象适配器的优点:对象适配器可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配器类和它的子类都适配到目标接口。
2.缺点
类适配器:PHP不支持多重继承,目标抽象类只能是接口,使用具有一定的局限性。
对象适配器:与类适配器模式相比,置换适配者类的方法不容易。
四、代码案例
1.MYSQL连接
interface IDatabase
{
function connect($host,$user,$password,$dbname);
function query($sql);
function close();
}
class MySQL implements IDatabase
{
protected $conn;
function connect($host,$user,$password,$dbname)
{
$conn = mysql_connect($host,$user,$password);
mysql_select_db($dbname,$conn);
$this->conn = $conn;
}
function query($sql)
{
$res = mysql_query($sql);
return $res;
}
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连接
interface IDatabase
{
function connect($host,$user,$password,$dbname);
function query($sql);
function close();
}
class MySQLi implements IDatabase
{
protected $conn;
function connect($host,$user,$password,$dbname)
{
$conn = mysqli_connect($host,$user,$password,$dbname);
$this->conn = $conn;
}
function query($sql)
{
$res = mysqli_query($this->conn,$sql);
return $res;
}
function close()
{
mysqli_close($this->conn);
}
}
$db = new MySQLi;
$db->connect('127.0.0.1','root','root','test');
$db->query("show databases");
$db->close();
3.PDO连接
interface IDatabase
{
function connect($host,$user,$password,$dbname);
function query($sql);
function close();
}
class PDOS implements IDatabase
{
protected $conn;
function connect($host,$user,$password,$dbname)
{
$conn = new PDO("mysql:host=$host;dbname=$dbname",$user,$password);
$this->conn = $conn;
}
function query($sql)
{
return $this->conn->query($sql);
}
function close()
{
unset($this->conn);
}
}
$db = new PDOS;
$db->connect('127.0.0.1','root','root','test');
$db->query("show databases");
$db->close();
五、课程截图
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦