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 相关文章推荐
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
php MYSQL 数据备份类
Jun 19 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
mac下安装nginx和php
Nov 04 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
php自定义分页类完整实例
Dec 25 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 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
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
详解node中创建服务进程
2017/05/09 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
中班开学寄语
2014/04/04 职场文书
软件项目开发计划书
2014/05/01 职场文书