为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第5天--大话PHP设计模式第六章节适配器模式

标签:
PHP

课程名称:大话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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消