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 相关文章推荐
第八节 访问方式 [8]
Oct 09 PHP
风格模板初级不完全修改教程
Oct 09 PHP
PHP中MVC模式的模板引擎开发经验分享
Mar 23 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
ini_set的用法介绍
Jan 07 PHP
php使用curl打开https网站的方法
Jun 17 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
Jul 25 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 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 mysql数据库操作类
2008/06/04 PHP
Php Cookie的一个使用注意点
2008/11/08 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
jquery中的过滤操作详细解析
2013/12/02 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
javascript简易画板开发
2020/04/12 Javascript
如何编写jquery插件
2017/03/29 jQuery
ES6中module模块化开发实例浅析
2017/04/06 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
Python常用内置函数总结
2015/02/08 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
简单实现python进度条脚本
2017/12/18 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
高等教育专业自荐信范文
2014/03/26 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
电影雷锋观后感
2015/06/10 职场文书
防溺水主题班会教案
2015/08/12 职场文书
初三化学教学反思
2016/02/22 职场文书
24年收藏2000多部退役军用电台
2022/02/18 无线电
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers