浅析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 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
PHP chmod 函数与批量修改文件目录权限
May 10 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
Web程序工作原理详解
Dec 25 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
php调用自己java程序的方法详解
May 13 PHP
PHP简单遍历对象示例
Sep 28 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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
C# Assembly类访问程序集信息
2009/06/13 PHP
php 静态变量的初始化
2009/11/15 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php数组中删除元素的实现代码
2012/06/22 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
php实现微信企业转账功能
2018/10/02 PHP
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
详解python使用turtle库来画一朵花
2019/03/21 Python
python爬虫之遍历单个域名
2019/11/20 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
甜点店创业计划书
2014/01/27 职场文书
第二课堂活动总结
2014/05/07 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
狮子林导游词
2015/02/03 职场文书
以权谋私检举信范文
2015/03/02 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python