浅析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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
PHP header函数分析详解
Aug 06 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
php实现小程序支付完整版
Oct 09 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
PHP 中的类
2006/10/09 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
php绘制一个扇形的方法
2015/01/24 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
Python3字符串encode与decode的讲解
2019/04/02 Python
Pandas分组与排序的实现
2019/07/23 Python
解决Django连接db遇到的问题
2019/08/29 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
python3.5的包存放的具体路径
2020/08/16 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
帕克纽约:PARKER NY
2018/12/09 全球购物
建材业务员岗位职责
2013/12/08 职场文书
村党支部换届选举方案
2014/05/02 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
小学英语复习计划
2015/01/19 职场文书
校长师德表现自我评价
2015/03/04 职场文书
行政介绍信范文
2015/05/04 职场文书
2016年国培研修日志
2015/11/13 职场文书
详解JS ES6编码规范
2021/05/07 Javascript