浅析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
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php调整服务器时间的方法
Apr 03 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
PHP实现GIF图片验证码
Nov 04 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
php 浮点数比较方法详解
May 05 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 PHP
php精度计算的问题解析
Jun 21 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
PHP之header函数详解
Mar 02 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python的几种开发工具介绍
2007/03/07 Python
python中的编码知识整理汇总
2016/01/26 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
python序列化与数据持久化实例详解
2019/12/20 Python
Django celery异步任务实现代码示例
2020/11/26 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
环境科学专业教师求职信
2014/07/12 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
python 制作一个gui界面的翻译工具
2021/05/14 Python
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server