浅析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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 PHP
php实现过滤UBB代码的类
Mar 12 PHP
Laravel 5框架学习之用户认证
Apr 09 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
php两点地理坐标距离的计算方法
Dec 29 PHP
Laravel 自带的Auth验证登录方法
Sep 30 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
深入了解php4(1)--回到未来
2006/10/09 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
javascript事件模型介绍
2016/05/31 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
vue组件与复用详解
2018/04/08 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
python中的列表推导浅析
2014/04/26 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
python创建学生管理系统
2019/11/22 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
英文升职感谢信
2015/01/23 职场文书
获奖感言范文
2015/07/31 职场文书
Oracle笔记
2021/04/05 Oracle
python b站视频下载的五种版本
2021/05/27 Python
python计算列表元素与乘积详情
2022/08/05 Python