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 存储文本换行实现方法
Jan 05 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php删除数组中重复元素的方法
Dec 22 PHP
PHP计算近1年的所有月份
Mar 13 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
php中关于换行的实例写法
Sep 26 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php绘制一个矩形的方法
2015/01/24 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
layui--js控制switch的切换方法
2019/09/03 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
Python正则表达式匹配中文用法示例
2017/01/17 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
python每天定时运行某程序代码
2019/08/16 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
什么是makefile? 如何编写makefile?
2012/08/08 面试题
中专毕业生求职简历的自我评价
2013/10/21 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
小学生作文批改评语
2014/12/25 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书