结构型设计模式->适配器模式

  • 目的
    1. 将一个接口转换成客户所需要的另一个接口,Adapter模式使两个接口原来不兼容而不能在一起工作的类在一起工作.(类似于翻译官,万能充电器)
  • 主要角色

    1.目标角色(Target) 规定能完成哪些适配
    2.源角色(Adaptee)对哪些方法完成适配
    3.适配器角色(Adapter)对源角色的适配

  • 优点

    1.可以让两个没有关系的类在一起工作
    2.提高了类的复用
    3.增加了类的透明度
    4.灵活性好

  • 缺点

    1.过多的使用适配器会让系统变得比较凌乱,比如明明调用了A接口,方法内部却被适配成了B,如果没有必要可以不必使用适配器.

  • 代码
sendPayment($amount)就可以进行支付,
 * 但是过了一段时间,这个调用方法名称改变了,
 * 或者是改用其它支付工具,
 * 显然将每个调用到这个方法的代码都改动一次是不太现实的,
 * 这个时候就可以考虑使用适配器模式进行封装通过调用Pay方法
 */

//目标角色(Target) 规定适配器能完成哪些适配doPaymentsendPayment
/**
 * 源角色(Adaptee)
 */
class Paypal
{
    public function sendPayment($amount)
    {
        echo 'this is Paypal'.$amount."
"; } } /** * 源角色(Adaptee) */ class Skrill { public function doPayment($amount) { echo "pay by Skrill:".$amount."
"; } } /** * 适配器角色(Adapter) */ class Pay { private $PayType; public function __construct($adaptee) { $this->PayType = $adaptee; } public function pay($amount) { $className = get_class($this->PayType); if($className == 'Paypal') { $this->PayType->sendPayment($amount); }else if($className == 'Skrill') { $this->PayType->doPayment($amount); } } } $paypal = new Paypal(); $Pay = new Pay($paypal); $Pay->pay(100); $paypal = new Skrill(); $Pay = new Pay($paypal); $Pay->pay(50);

你可能感兴趣的:(结构型设计模式->适配器模式)