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中array_merge与array+array的区别
Jun 21 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
利用php生成验证码
Feb 23 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
Zerg兵种介绍
2020/03/14 星际争霸
php操作xml
2013/10/27 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
JavaScript 特殊字符
2007/04/05 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
django反向解析和正向解析的方式
2018/06/05 Python
Python整数对象实现原理详解
2019/07/01 Python
python 循环数据赋值实例
2019/12/02 Python
Python模块相关知识点小结
2020/03/09 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
编辑求职信样本
2013/12/16 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
写给领导的感谢信
2015/01/22 职场文书
项目安全员岗位职责
2015/02/15 职场文书
公司庆典主持词
2015/07/04 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
JAVA API 实用类 String详解
2021/10/05 Java/Android