浅析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文本数据库的搜索方法
Oct 09 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
PHP中数组转换为SimpleXML教程
Jan 27 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
神族 PROTOSS 概述
2020/03/14 星际争霸
php中{}大括号是什么意思
2013/12/01 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP模块化安装教程
2016/06/01 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python正则表达式常用函数总结
2017/06/24 Python
Python实现的弹球小游戏示例
2017/08/01 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
公积金贷款承诺书
2015/04/30 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android