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.ini中文版
Oct 09 PHP
用PHP编写PDF文档生成器
Oct 09 PHP
PHP 高手之路(三)
Oct 09 PHP
php将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
关于IIS php调用com组件的权限问题
Jan 11 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 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设置session值和cookies的学习示例
2014/03/21 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Python算法之栈(stack)的实现
2014/08/18 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
python pandas库的安装和创建
2019/01/10 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
Python join()函数原理及使用方法
2020/11/14 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
装潢设计专业推荐信模板
2013/11/26 职场文书
小班重阳节活动方案
2014/02/08 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
食品销售计划书
2014/04/26 职场文书
幼儿园标语大全
2014/06/19 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android