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优于Node.js的五大理由分享
Sep 15 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
PHP多例模式介绍
Jun 24 PHP
php实现统计邮件大小的方法
Aug 06 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
如何实现php图片等比例缩放
Jul 28 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
php实现微信支付之企业付款
May 30 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
jQuery操作cookie
2016/08/08 Javascript
Vue表单实例代码
2016/09/05 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
python中解析json格式文件的方法示例
2017/05/03 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
什么是数组名
2012/05/10 面试题
高三自我鉴定范文
2013/10/19 职场文书
在职人员函授期间自我评价分享
2013/11/08 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
理财投资建议书
2014/03/12 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
创先争优承诺书
2015/01/20 职场文书
公司年夜饭通知
2015/04/25 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang