浅析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+APACHE实现用户论证的方法
Oct 09 PHP
php中去除所有js,html,css代码
Oct 12 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
php 常用算法和时间复杂度
Jul 01 PHP
使用phpQuery采集网页的方法
Nov 13 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
一个非常实用的php文件上传类
Jul 04 PHP
PHP批量删除jQuery操作
Jul 23 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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&java(二)
2006/10/09 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
教你如何使用php session
2013/10/28 PHP
php中的动态调用实例分析
2015/01/07 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
浅谈Vue.use的使用
2018/08/29 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
如何查看python关键字
2021/01/17 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
军训的自我鉴定
2013/12/10 职场文书
网上卖盒饭创业计划书范文
2014/02/07 职场文书
护理专科自荐书范文
2014/02/18 职场文书
教师个人自我评价范文
2014/04/13 职场文书
小班评语大全
2014/05/04 职场文书
运动会主持人开幕词
2016/03/04 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
如何解决php-fpm启动不了问题
2021/11/17 PHP