PHP设计模式之适配器模式代码实例


Posted in PHP onMay 11, 2015

目标:

可将一个类的接口转换成客户希望的另外一个接口,使得原本不兼容的接口能够一起工作。通俗的理解就是将不同接口适配成统一的API接口。

角色:

Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口。
Adaptee被适配者,就是需要被适配的接口。
Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。

应用场景:

如数据操作有mysql、mysqli、pdo、sqlite、postgresql等,假若生成环境需要更换数据库时,可利用适配器模式统一接口。同理cache的场景也是,这会是更换缓存策略(memcache、redis、apc)更方便。

优势:

被适配者通过适配器完成对适配目标的适配,以达到对客户使用透明的目的。

示例代码:

//适配目标,规定的接口将被适配对象实现
interface IDatabase
{
  public function connect($host, $username, $password, $database);
  public function query($sql);
}
 
//适配器
class Mysql implements IDatabase
{
  protected $connect;
 
  public function connect($host, $username, $password, $database)
  {
    $connect = mysql_connect($host, $username, $password);
    mysql_select_db($database, $connect);
    $this->connect = $connect;
    //...
  }
 
  public function query($sql)
  {
    //...
  }
}
 
//适配器
class Postgresql implements IDatabase
{
  protected $connect;
 
  public function connect($host, $username, $password, $database)
  {
    $this->connect = pg_connect("host=$host dbname=$database user=$username password=$password");
    //...
  }
 
  public function query($sql)
  {
    //...
  }
}
 
 
//客户端使用
$client = new Postgresql();
$client->query($sql);

如上:

Target适配目标: IDataBase接口
Adaptee被适配者: mysql和postgresql的数据库操作函数
Adapter适配器 :mysql类和postgresql类

PHP 相关文章推荐
PHP源代码数组统计count分析
Aug 02 PHP
php的一个简单加密解密代码
Jan 14 PHP
php curl post 时出现的问题解决
Jan 30 PHP
smarty简单入门实例
Nov 28 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
PHP树形结构tree类用法示例
Feb 01 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
php桥接模式应用案例分析
Oct 23 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 #PHP
PHP设计模式之装饰者模式代码实例
May 11 #PHP
PHP超牛逼无限极分类生成树方法
May 11 #PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 #PHP
PHP获取当前日期和时间及格式化方法参数
May 11 #PHP
PHP借助phpmailer发送邮件
May 11 #PHP
PHP date函数常用时间处理方法
May 11 #PHP
You might like
理解PHP5中static和const关键字的区别
2007/03/19 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
python表格存取的方法
2018/03/07 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
JAVA代码查错题
2014/10/10 面试题
Linux的文件类型
2012/03/07 面试题
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
博物馆观后感
2015/06/05 职场文书
诚实守信主题班会
2015/08/13 职场文书