php设计模式(九)类适配器模式

适配器模式还有一个名字叫包装器模式;
其实很容易理解;
因为现实中我们天天都在用;
就比如说手机充电器;
墙上的插孔装修完后就不在变了;
手机买回来后我们也不会去改造它;
如何让不变的插孔和不变的手机之间能连上充电;
并且把220V转换为5V;
这时候就需要电源适配器了;
软件开发中也是同样的道理;
在软件中适配器分为类适配器和对象适配器;
我们先来讲类适配器;

结构

Adaptee:原本已经有的具体类;
Target:目标接口;包含我们希望拥有的方法;
Adapter:适配器类;适配 Adaptee 和 Target;

示例

Adaptee.php

<?php

namespace Baijunyao\DesignPatterns\ClassAdapter;

/**
 * 源类
 *
 * Class Target
 * @package Baijunyao\DesignPatterns\ClassAdapter
 */
class Adaptee
{
    /**
     * 金额
     *
     * @var string
     */
    public $money = '¥34';

    /**
     * 支付
     */
    public function pay()
    {
        echo '支付' . $this->money;
    }
}

Target.php

<?php

namespace Baijunyao\DesignPatterns\ClassAdapter;

/**
 * 目标类接口
 *
 * Interface Target
 * @package Baijunyao\DesignPatterns\ClassAdapter
 */
interface Target
{
    /**
     * 支付
     *
     * @return mixed
     */
    public function pay();

    /**
     * 通知
     *
     * @return mixed
     */
    public function notify();
}

Adapter.php

<?php

namespace Baijunyao\DesignPatterns\ClassAdapter;

/**
 * 适配器
 *
 * Class Adapter
 * @package Baijunyao\DesignPatterns\ClassAdapter
 */
class Adapter extends Adaptee implements Target
{
    /**
     * Adapter constructor.
     */
    public function __construct()
    {
        $this->money = '$5';
    }

    /**
     * 通知
     */
    public function notify()
    {
        echo '通知';
    }
}

运行;
index.php

<?php

namespace Baijunyao\DesignPatterns\ClassAdapter;

require __DIR__.'/../vendor/autoload.php';

/**
 * 客户端
 *
 * Class Client
 * @package Baijunyao\DesignPatterns\ClassAdapter
 */
class Client
{
    /**
     * 运行
     */
    public function run()
    {
        // 原本的类的
        $adaptee = new Adaptee();
        $adaptee->pay();
        echo '<br>';

        // 适配器
        $adapter = new Adapter();
        $adapter->pay();
        echo '<br>';

        $adapter->notify();
    }
}

$client = new Client();
$client->run();

通过适配后;
我们可以在不改变原本的 Adaptee 类的情况下改变支付的币种;
并且可以灵活的增加新的方法;

github示例:https://github.com/baijunyao/design-patterns/tree/master/ClassAdapter

php适配器模式

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共7条评论
白俊遥博客

烛光 :学习了。努力学习中...白俊遥博客

2018-11-20 13:44:09 回复

白俊遥博客

苏妞尔 :还可以了

2018-09-10 11:09:05 回复

白俊遥博客

缺氧 :有时间研究研究,紧跟白哥的脚步

2018-08-31 15:46:49 回复

白俊遥博客

. :第三方斯蒂芬斯蒂芬斯蒂芬

2018-08-31 14:54:24 回复

白俊遥博客

时光鸡 :..

2018-08-27 15:10:35 回复

白俊遥博客

. :地方无缝违反违反位访问服务

2018-08-31 15:17:16 回复

白俊遥博客

烛光 白俊遥博客

2018-11-22 16:38:15 回复