PHP设计模式之适配器模式

PHP设计模式之适配器模式

1、适配器模式的概念

        适配器设计模式只是将某个对象的接口适配为另一个对象所期待的接口。


2、UML静态模型



3、单例模式举例

        今天从网络上爬了一些数据,爬下来的内容如下表格所示,该内容在另一页面直接显示,这里的爬虫代码就不写了,只写一个模拟的效果。


address
山东威海农副产品批发市场
甘肃靖远瓜果蔬菜批发市场
河南南阳果品批发交易中心
安徽亳州蔬菜批发市场
江苏无锡朝阳农贸市场



1、得到数据代码如下所示:文件名Datas.php

<?php
class Datas{
protected $_data;

function __construct(){
$this->_data = array(
'山东威海农副产品批发市场',
'甘肃靖远瓜果蔬菜批发市场',
'河南南阳果品批发交易中心',
'安徽亳州蔬菜批发市场',
'江苏无锡朝阳农贸市场'
);
}
public function get(){
return $this->_data;
}
}

2、显示数据代码如下所示:文件名shows.php
<?php
header('content-type:text/html;charset=gb2312');
require_once 'Datas.php';

$datas = new Datas();
$data = $datas->get();
foreach ($data as $value){
echo $value."<br>";
}

        现在,我要把数据存到数据库,由于获取到的数据的前两个字是地区名,所以在数据库存取时要求将该条记录的地区名也存进去,也就是截取一下前两个汉字即可。现在应该怎么办?重新在这个类中写一个方法?尽量不要这样,因为这个类在别的页面中应用,所以就尽量不要更改这个类了,以免引出其他错误,现在就是写一个适配器,返回的数据就是地区名+市场名的数据格式。

3、适配器代码如下:DatasAdapter.php
<?php
require_once 'Datas.php';
class DatasApapter extends Datas{
function __construct(){
parent::__construct(); //父对象实例化,获取到的数据存在父对象
}

function get(){
$data = array();
foreach (parent::get() as $value){ //调用父对象的get获取到数据 因为父类中的get()为获取原始数据,重用父类方法,在子类的方法在只是适配一下数据而已。
$data[] = array(
'region' => mb_substr($value,0,2,'GB2312'),
'market' => $value
);
}
return $data;
}
}

4、使用适配器代码如下:db.php
<?php
header('content-type:text/html;charset=gb2312');
require_once 'DatasAdapter.php';


$obj = new DatasApapter();
$data = $obj->get();
foreach ($data as $value){
foreach ($value as $k => $v)
echo $k."=>".$v;
echo "<br>";
}

4、结论

        在开发过程中,如果需求发生了改变,不要急于去重新写该部分的代码,因为该需求只变了一部分,其他功能可能还用到原先的代码了,若去重写该代码,考虑不周的话可能会在其他功能出错,所以最好的实践就是去创建一个适配器,将原先的接口适配成现在所需要的接口,这样一来,不仅可以重用之前写的代码,并且能减少很多麻烦。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值