适配器模式

适配器模式解析

这是我看的一篇博客顺便记录原文地址(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类就可以了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值