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 mvc开发模式的感想
Jun 28 PHP
php中的一些数组排序方法分享
Jul 20 PHP
file_get_contents("php://input", "r")实例介绍
Jul 01 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
php调整服务器时间的方法
Apr 03 PHP
PHP图像处理类库及演示分享
May 17 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 PHP
php提高脚本性能的4个技巧
Aug 18 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 Squid中可缓存的动态网页设计
2008/09/17 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
基于jQuery的倒计时实现代码
2012/05/30 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
Python os模块介绍
2014/11/30 Python
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
python中加背景音乐如何操作
2020/07/19 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
长青弘远的面试题
2012/06/09 面试题
结对共建工作方案
2014/06/02 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL