php教程自学网 - 轻松零基础学php视频教程
条幅广告
当前位置: 主页 > PHP个人博客专栏 >

白俊遥博客:php设计模式(九)类适配器模式

时间:2019-06-25 17:45来源:未知 作者:admin 点击:
适配器模式还有一个名字叫包装器模式; 其实很容易理解; 因为现实中我们天天都在用; 就比如说手机充电器; 墙上的插孔装修完后就不在变了; 手机买回来后我们也不会去改造它
适配器模式还有一个名字叫包装器模式;
其实很容易理解;
因为现实中我们天天都在用;
就比如说手机充电器;
墙上的插孔装修完后就不在变了;
手机买回来后我们也不会去改造它;
如何让不变的插孔和不变的手机之间能连上充电;
并且把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;
    }
}
PHPCopy
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();
}
PHPCopy
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 '通知';
    }
}
PHPCopy
运行;
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();
PHPCopy
通过适配后;
我们可以在不改变原本的 Adaptee 类的情况下改变支付的币种;
并且可以灵活的增加新的方法;
 
(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关推荐