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数据流应用的简单例子
Jun 01 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP文件上传操作实例详解
Sep 27 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 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
2.PHP入门
2006/10/09 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python简单实现enum功能的方法
2016/04/25 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python实现顺时针打印矩阵
2019/03/02 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
什么是URL
2015/12/13 面试题
校友会欢迎辞
2014/01/13 职场文书
公司经理聘任书
2014/03/29 职场文书
租车协议书范本2014
2014/11/17 职场文书
签字仪式主持词
2015/07/03 职场文书
学校隐患排查制度
2015/08/05 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
护士业务学习心得体会
2016/01/25 职场文书