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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
php中iconv函数使用方法
May 24 PHP
phpmyadmin 访问被拒绝的真实原因
Jun 15 PHP
php三维数组去重(示例代码)
Nov 26 PHP
PHP安全的URL字符串base64编码和解码
Jun 19 PHP
PHP中echo和print的区别
Aug 28 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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函数解决SQL injection
2006/12/09 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
PHP扩展开发入门教程
2015/02/26 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
简单谈谈Python流程控制语句
2016/12/04 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
公司承诺函范文
2015/01/21 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
总结Pyinstaller打包的高级用法
2021/06/28 Python
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
我去timi了,一起去timi是什么意思?
2022/04/13 杂记