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 相关文章推荐
BBS(php & mysql)完整版(八)
Oct 09 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
php compact 通过变量创建数组
Nov 15 PHP
yii2-GridView在开发中常用的功能及技巧总结
Jan 07 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 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
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
jQuery 三击事件实现代码
2013/09/11 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
python远程连接MySQL数据库
2019/04/19 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
parser.add_argument中的action使用
2020/04/20 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
世界汽车零件:World Car Parts
2019/09/04 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
个人教师自我评价范文
2013/12/02 职场文书
寒假思想汇报
2014/01/10 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
法学求职信
2014/06/22 职场文书
社区护士演讲稿
2014/08/27 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
2016年十一促销广告语
2016/01/28 职场文书
golang的文件创建及读写操作
2022/04/14 Golang