適配器模式

這是我看的一篇博客順便記錄原文地址(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類就可以了。

 

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