注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Copper peas ' Bolg

Keep On Moving...This Is My Life...

 
 
 

日志

 
 

【原】 PHP 设计模式四之适配器设计模式  

2011-06-02 11:58:30|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

<?php
header("Content-type:text/html; charset=utf-8");
/**
 * 获取数据格式不同 适配器设计模式  类适配器(继承)和对象适配器(委派)推荐使用对象适配器,更能降低耦合关系,下面案例使用的是对象适配器。
 * 获取数据格式暂定为   获取数据的结构大部分已定,原来对象返回的是数组   现在另外一个接口需要返回json 两种
 * [
 *   区别装饰器模式(decorator模式):装饰模式增强了其他对象的功能而同时又不改变它的接口,适配器模式需要修改扩展接口。
 *   装饰修改的功能一般存在可以叠加,而适配器的一般是不需要的。
 * ]
 * @author Chen Wei Han <csq-3@163.com>
 * @copyright Chen Wei Han 2011.06.02
 * @link http://csq-3.blog.163.com
 * @package demo
 * @version $Id: adapter.php 1 2011-06-02
 */

/**
 * 数据源角色类
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
class Data
{
 private $arr = array("1"=>"a","2"=>"b","3"=>"c");
 
 public function getdata()
 {
  return $this->arr;
 }
}

/**
 * 适配器角色接口
 */
interface interface_Adapter
{
  public function backarr();
  public function backjson();
}

 /**
  * 数组返回格式   数组类   以前存在的
  *
  * @author Chen Wei Han <csq-3@163.com>
  * @package demo
  */
class Backarr

    private $_data;
   
 public function setdata($data)
 {
  $this->_data = $data;
 }
 
 public function GetResult()
 {
  return $this->_data->getdata();
 }
}

/**
 * 数据格式返回 json类 现在新加的
 *
 * @author Chen Wei Han <csq-3@163.com>
 * @package demo
 */
class Adapter implements interface_Adapter
{
 private $_adapterarr;
 private $_data; 
 
 public function __construct(backarr $backarr_class)
 {
  $this->_adapterarr = $backarr_class;
 }
 
 public function setdata($data)
 {
  $this->_data = $data;
 }
 
 public function backarr()
 {
  $this->_adapterarr->setdata($this->_data);
  return $this->_adapterarr->GetResult();
 }
 
 public function backjson()
 {
  return json_encode($this->_data->getdata());
 }
  
}

/**
 *  调用
 */
//数据源
$data         = new Data();
//以前老接口
$backarr      = new Backarr();
//适配器接口       
$adapter      = new Adapter($backarr);
//设置数据源
$adapter->setdata($data);
//返回数组格式
print_r ($adapter->backarr($data));
//返回json格式
print_r ($adapter->backjson($data));

/*
 * 如果第三方接口的函数已经定死也就是GetResult,那么你可以继承Backarr,然后重写json返回函数为GetResult,就能完美解决你和第三方的问题。
 * 理论是死的,实际应用是需要灵活多变的
 */

  评论这张
 
阅读(94)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018