浅析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
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
PHP实现的增强性mhash函数
May 27 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
Mar 16 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
laravel自定义分页效果
Jul 23 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
农历与西历对照
2006/09/06 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
python 多线程应用介绍
2012/12/19 Python
python批量提交沙箱问题实例
2014/10/08 Python
Python中IPYTHON入门实例
2015/05/11 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
python2与python3共存问题的解决方法
2018/09/18 Python
python连接mongodb密码认证实例
2018/10/16 Python
python scipy卷积运算的实现方法
2019/09/16 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
厂长助理岗位职责
2013/12/27 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
pt-archiver 主键自增
2022/04/26 MySQL