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+javascript模拟Matrix画面
Oct 09 PHP
PHP获取网卡地址的代码
Apr 09 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
PHP单例模式详细介绍
Jul 01 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
php 实现银联商务H5支付的示例代码
Oct 12 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
javascript 节点遍历函数
2010/03/28 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
js通过classname来获取元素的方法
2016/11/24 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
js数组常用最重要的方法
2018/02/04 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Python探索之自定义实现线程池
2017/10/27 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python实现泊松图像融合
2018/07/26 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
英文求职信结束语大全
2013/10/26 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
《乞巧》教学反思
2014/02/27 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
英文产品推荐信
2015/03/27 职场文书
贷款收入证明范本
2015/06/12 职场文书
利用python做表格数据处理
2021/04/13 Python
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript