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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
php4的session功能评述(二)
Oct 09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
php删除数组指定元素实现代码
May 03 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
Jul 17 PHP
laravel 修改.htaccess文件 重定向public的解决方法
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
PHP安全配置
2006/10/09 PHP
用PHP连接Oracle数据库
2006/10/09 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
PHP输出日历表代码实例
2015/03/27 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
python中解析json格式文件的方法示例
2017/05/03 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
爱情检讨书大全
2014/01/21 职场文书
幼儿教育感言
2014/02/05 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
女方离婚起诉书
2015/05/18 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js