适配器模式

适配器模式如同其名,就想电源适配器一样,用于适配不同的东西,只是程序中多用于适配不同的数据格式和驱动。

<?php
/**
 * 适配器模式
 *
 * @author T.L.Q. <email hjq_tlq@163.com>
 */
/**
 * 数据提供者,原始的数据来源
 *
 */
class DataPervider
{
    private $_data;
   
    public function __construct($data)
    {
        // 这里还可以对数据进行处理,例如将将data里面添加一些默认值等等
        // 这里是为了简化,数据可以不是传入,而是从Db或者其他地方的值则
        // 如果不是传入的值则可以不写这个构造函数,在下面直接在下面的getData方法中得到数据并且返回
        $this->_data = $data;
    }
   
    public function getData()
    {
        return $this->_data;
    }
}

/**
 * 应用程序接口
 */
class JsonApi
{
    private $_dataPerviderObj;
   
    public function __construct(DataPervider $dataPerviderObj)
    {
        $this->_dataPerviderObj = $dataPerviderObj;
    }
   
    public function api()
    {
        echo json_encode($this->_dataPerviderObj->getData());
    }
}

$dataPerviderObj = new DataPervider(array('name' => 'tlq', 'email' => 'hjq_tlq@163.com'));
$apiObj = new JsonApi($dataPerviderObj);
$apiObj->api();

/**
 * 新增业务需求,需要将数据用Csv输出
 */
/**
 * 数据适配器
 * @author T.L.Q.
 *
 */
class CsvDataAdapter extends DataPervider
{
    private $_name,$_email;
   
    public function __construct($data)
    {
        parent::__construct($data);
        $datas = $this->getData();
        $this->_name = $datas['name'];
        $this->_email = $datas['email'];
        print_r($this->_data);
    }
   
    public function getName()
    {
        return $this->_name;
    }
   
    public function getEmail()
    {
        return $this->_email;
    }
   
    public function apiAdapter()
    {
       
    }
}
/**
 * CsvApi
 */
class CsvApi
{
    private $_dataPervider;
   
    public function __construct(DataPervider $dataPervider)
    {
        $this->_dataPervider = $dataPervider;
    }
   
    public function api()
    {
        $line = $this->_dataPervider->getName();
        $line .= ',';
        $line .= $this->_dataPervider->getEmail();
        $line .= "\n";
        echo $line;
    }
}
// 实例化的是一个适配器而不是数据提供者,这里就跟我们平时使用电源适配器一样,不是直接接入用手机接入直流电,而是通过适配器获得电源
$dataPerviderObj = new CsvDataAdapter(array('name' => 'tlq', 'email' => 'hjq_tlq@163.com'));
$apiObj = new CsvApi($dataPerviderObj);
$apiObj->api();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值