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&mysql(一)
Oct 09 PHP
新闻分类录入、显示系统
Oct 09 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
2014过年倒计时示例
Jan 31 PHP
PHP比你想象的好得多
Nov 27 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
微信支付开发订单查询实例
Jul 12 PHP
微信支付的开发流程详解
Sep 13 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
SVG实现时钟效果
2018/07/17 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
python根据京东商品url获取产品价格
2015/08/09 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
python打开使用的方法
2019/09/30 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
医学生自荐信范文
2013/12/03 职场文书
法制教育演讲稿
2014/09/10 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers