浅析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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
PHP模拟SQL Server的两个日期处理函数
Oct 09 PHP
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
php构造函数实例讲解
Nov 13 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
php面象对象数据库操作类实例
Dec 02 PHP
thinkphp常见路径用法分析
Dec 02 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
PHP错误机制知识汇总
Mar 24 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
javascript动态加载二
2012/08/22 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
jquery replace方法去空格
2017/05/08 jQuery
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
python遍历小写英文字母的方法
2019/01/02 Python
python制作填词游戏步骤详解
2019/05/05 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
使用Python函数进行模块化的实现
2019/11/15 Python
python颜色随机生成器的实例代码
2020/01/10 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
nohup的用法
2014/08/10 面试题
企业申诉管理制度
2014/01/30 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
认错检讨书
2014/10/02 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
Python的property属性详细讲解
2022/04/11 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python