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:风雨欲来 路在何方?
Oct 09 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
PHP结合jQuery实现找回密码
Jul 22 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
Laravel 读取 config 下的数据方法
Oct 13 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
php生成HTML文件的类方法
2019/10/11 PHP
jquery text()要注意啦
2009/10/30 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Python函数式编程
2017/07/20 Python
python实现感知器
2017/12/19 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
python 自定义对象的打印方法
2019/01/12 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
Python3 元组tuple入门基础
2020/02/09 Python
Python多线程的退出控制实现
2020/08/10 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
laravel使用redis队列实例讲解
2021/03/23 PHP
安全教育演讲稿
2014/05/09 职场文书
日语系毕业求职信
2014/07/27 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
个人优缺点总结
2015/02/28 职场文书
初婚初育证明范本
2015/06/18 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby