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 相关文章推荐
MySql中正则表达式的使用方法描述
Jul 30 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
php操作access数据库的方法详解
Feb 22 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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
第十四节 命名空间 [14]
2006/10/09 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
Smarty模板配置实例简析
2019/07/20 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
使用JS动态显示文本
2017/09/09 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python函数参数类型*、**的区别
2015/04/11 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
傲盾软件面试题
2015/08/17 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
新闻专业个人求职信
2013/12/19 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
质量承诺书格式范文
2015/04/28 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript