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错误信息方法的详解
Jun 09 PHP
PHP截取指定图片大小的方法
Dec 10 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
PHP MSSQL 分页实例
Apr 13 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 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
php递归列出所有文件和目录的代码
2008/09/10 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
php商品对比功能代码分享
2015/09/24 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
php如何获取Http请求
2020/04/30 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
如何填写个人简历自我评价
2013/12/10 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
事业单位接收函
2014/01/10 职场文书
大学生自荐信范文
2015/03/05 职场文书
求职导师推荐信范文
2015/03/27 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android