php适配器模式介绍


Posted in PHP onAugust 14, 2012

要点:

1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

实现:

php适配器模式介绍

类的适配器模式结构图(继承)

php适配器模式介绍

 

对象的适配器模式结构图(组合)

(对象适配器的代码实现)

Target:定义Client使用的与特定领域相关的接口

public interface Target { void request();}

 

Adaptee:现在需要适配的已经存在的接口

public class Adaptee{ public void specificRequest(){}}

 

Adapter:对Adaptee 的接口与Target接口进行适配

public class Adapter implements Target{ public Adapter(Adaptee adaptee) { super(); this.adaptee = adaptee; } public void request() { adaptee.specificRequest(); } private Adaptee adaptee;}

 

适用性:

1. 系统需要使用现有的类,而此类的接口不符合系统的需要。

2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

3. (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

效果及优缺点:

对于类适配器:

1. 用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

2. 使得Adapter可以override(重定义) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

对于对象适配器:

1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。

2. 使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。

PHP 相关文章推荐
PHP实现采集程序原理和简单示例代码
Mar 18 PHP
PHP 在线翻译函数代码
May 07 PHP
php简单的会话类代码
Aug 08 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
php制作动态随机验证码
Feb 12 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
PHP缓存技术的多种方法小结
Aug 14 #PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 #PHP
php调用dll的实例操作动画与代码分享
Aug 14 #PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 #PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 #PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 #PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 #PHP
You might like
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
Javascript注入技巧
2007/06/22 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python实现车牌识别的示例代码
2019/08/05 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
中秋节超市促销方案
2014/01/30 职场文书
参观接待方案
2014/03/17 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
刑事案件上诉状
2015/05/23 职场文书
导游词之西安骊山
2019/12/03 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
python处理json数据文件
2022/04/11 Python