浅析php适配器模式(Adapter)


Posted in PHP onNovember 25, 2014

前几篇介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,接下来讲讲结构型模式。

一、什么是结构型模式

结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题。

二、结构型模式的种类

适配器模式
桥接模式
装饰模式
组合模式
外观模式
享元模式
代理模式

1、 适配器模式(Adapter)
将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本的由于接口不兼容而不能一起工作的那些类可以一起工作。
应用场景:老代码接口不适应新的接口需求,或者代码很多很乱不便于继续修改,或者使用第三方类库。

代码实现

//老的代码     

class User {    

    private $name;    

    function __construct($name) {    

        $this->name = $name;    

    }    

    public function getName() {    

        return $this->name;    

    }    

}   
//新代码,开放平台标准接口    

interface UserInterface {    

    function getUserName();    

}    

class UserInfo implements UserInterface {    

    protected $user;    

    function __construct($user) {    

        $this->user = $user;    

    }    

    public function getUserName() {    

        return $this->user->getName();    

    }    

}   
$olduser = new User('张三');    

echo $olduser->getName()."n";    

$newuser = new UserInfo($olduser);    

echo $newuser->getUserName()."n";   

 注意点:这里的新接口使用了组合方式,UserInfo内部有一个成员变量保存老接口User对象,模块之间是松耦合的,这种结构其实就是组合模式。不要使用继承,虽然UserInfo继承User也能达到同样的目的,但是耦合度高,相互产生影响。

以上就是关于php设计模式中结构性模式中的适配器模式的全部内容了,小伙伴们是否了解清楚了呢,有问题就给我留言吧

PHP 相关文章推荐
用PHP创建PDF中文文档
Oct 09 PHP
substr()函数中文版
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
Smarty的配置与高级缓存技术分享
Jun 05 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
隐性调用php程序的方法
Jun 13 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
php集成开发环境详解
Sep 24 PHP
浅析php原型模式
Nov 25 #PHP
浅析php创建者模式
Nov 25 #PHP
浅析php工厂模式
Nov 25 #PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 #PHP
浅析php单例模式
Nov 25 #PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 #PHP
php字符串截取函数用法分析
Nov 25 #PHP
You might like
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
json跟xml的对比分析
2008/06/10 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
js实现简单的倒计时
2021/01/28 Javascript
python传递参数方式小结
2015/04/17 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
使用python实现多维数据降维操作
2020/02/24 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
市场营销专科应届生求职信
2013/11/24 职场文书
人力资源专业推荐信
2013/11/29 职场文书
理工科学生的自我评价
2013/12/15 职场文书
大二自我鉴定
2014/01/31 职场文书
教师专业自荐书范文
2014/02/10 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
小学评语大全
2014/04/22 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
中学社团活动总结
2015/05/07 职场文书
R9700摩机记
2022/04/05 无线电
mysql sql常用语句大全
2022/06/21 MySQL