Adapter,中文可以翻译成转换器。在我们的应用里可能需要用到第三方提供的一些库,这些库都会提供一些方法可以做不同的事情。比如支付,发送邮件之类的 .. 我们不直接使用第三方库里提供的功能,而是去给它们创建一些转换器,就是 Adapter ... 然后在应用里使用这些转换器 ...
这样做的好处就是,如果这些第三方库以后有什么变化 ... 我们只需要修改一下转换器的功能就行了 .. Adapter 这种东西我们平时在生活里也经常用到,比如三项电源插头转换成两项电源插头,就需要一个转换器 ...
现在假设在我的应用的需要用到支付宝的支付功能 .. 在支付宝的 SDK 里可能有个类 .. 名字是 AlipayTradeService ..
假设它里面有个支付用的方法 .. 名字是 wapPay .. 表示手机网站支付的方式 .. 方法需要用到支付的金额 ... $total_amount ...
return 一个 .. 用支付宝支付 .. 后面加上支付的金额 ...
如果不用转换器的话,使用支付宝的这个支付方法,应该像这样 ... $payment 等于 new AlipayTradeService ..
然后用一下它里面的 wapPay 这个方法来支付 ... 给它一个要支付的金额 .. 再输出结果 ..
回到命令行 ... 执行一下 php adapter.php .. 会输出一个 用支付宝支付:599
Adapter
现在我们用一下 Adapter 这种设计模式来改进一下 .. 先定义一下接口 ... 名字可以是 paymentAdapter ... 里面有个方法叫 pay ... 支付一个支付金额参数 ..
然后我们再单独为支付宝这种支付方式去创建一个转换器 .. 名字是 AlipayAdapter .. 它要 implements 一下 paymentAdapter ..
这样这个类里要包含一个 pay 方法 ..
先在里面添加一个私有的 $alipay .. 表示支付宝这种支付方式 ..
添加一个构造函数 .. 然后把支付宝的支付对象交给它 ... AlipayTradeService $alipay .. $this->alipay 等于 alipay , 让这个转换器里的 $alipay 等于实例化以后的这个 AlipayTradeService 对象 ..
再添加一个 pay 方法 .. $amount 表示要支付的金额 .. 在里面用一下 $this->alipay->wapPay ..
实施了 PaymentAdapter 接口的类都得包含这个方法 .. 这样我们可以在应用里放心的使用这个 pay 方法去支付 ..
这个 pay 方法就是这个转换器提供的一个功能 .. 支付的时候可以使用这个转换器里的 pay 方法 .. 在这个 Alipay 转换器里面,这个 pay 方法做的事就是使用 AlipayTradeService 里的 wapPay 去完成支付 ..
演示
再演示一下 .. 注释掉上面直接使用 AlipayTradeService 支付的代码 .. 再创建一个 $payment .. 创建一个 AlipayAdapter 对象 .. 这是我们为支付宝创建的转换器 .. 这里我们要把一个 AlipayTradeService 交给它 ..
这样我们就可以用一下 $payment 里的 pay 这个方法来支付 .. 指定一个要支付的金额 .. 再输出这个结果 ..
回到命令行 .. 再试一下 .. 会输出一个用支付宝支付:599 ... 在支付的时候我们没直接用支付宝提供的支付方法 .. 而是用了我们为支付宝创建的转换器里的支付方法 ..
这个转换器里的支付方法, 实际上用的就是支付宝里的支付方法 ..
以后支付宝的支付方法可能会有变化 ... 我们要做的就是去修改为它创建的转换器里的东西就行了 ...