浅析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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
php数组去重的函数代码
Feb 03 PHP
php使用反射插入对象示例分享
Mar 11 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
PHP常用的三种设计模式
2017/02/17 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python实现的防DDoS脚本
2011/02/08 Python
python处理文本文件并生成指定格式的文件
2014/07/31 Python
python获取本机外网ip的方法
2015/04/15 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
PyQt5每天必学之组合框
2018/04/20 Python
python实现京东秒杀功能
2018/07/30 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python读取YAML文件过程详解
2019/12/30 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis