适配器模式

这是我看的一篇博客顺便记录原文地址(https://www.awaimai.com/patterns/adapter

优点:API有变化,我们仅需修改客户端依赖的适配器类就可以,不用修改、暴露第三方类本身

场景:解决类之间的兼容问题,代码依赖一些外部的API,或者依赖一些可能会经常更改的类,那么应该考虑用适配器模式。

例子:需要使用一个支付宝支付类

class Alipay
{
    public function sendPayment()
    {
        echo '使用支付宝支付。';
    }
}

// 客户端代码
$alipay = new Alipay();
$alipay->sendPayment();

出现问题:假设实例化Alipay类完成支付功能,这样客户端代码可能很多,支付宝支付类升级为sendpayment,我们自己需要改动地方很多

解决方案:

客户端调用统一的类方法,我们先定义一个适配器接口

/**
 * 适配器接口,所有的支付适配器都需实现这个接口。
 * 不管第三方支付实现方式如何,对于客户端来说,都
 * 用pay()方法完成支付
 */
interface PayAdapter
{
    public function pay();
}

在新建一个AlipayAdapter适配器类,在pay()中转换Alipay的支付功能,如下:

/**
 * 支付宝适配器
 */
class AlipayAdapter implements PayAdapter
{
    public function pay()
    {
        // 实例化Alipay类,并用Alipay的方法实现支付
        $alipay = new Alipay();
        $alipay->sendPayment();
    }
}

客服端使用

// 客户端代码
$alipay = new AlipayAdapter();
// 用pay()方法实现支付
$alipay->pay();

这样,当Alipay的支付方法改变,只需要修改AlipayAdapter类就可以了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章