浅析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 和 MySQL 时区的一点总结
Mar 26 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
PHP中文乱码解决方案
Mar 05 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP ADODB实现分页功能简单示例
May 25 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
Laravel 错误提示本地化的实现
Oct 22 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与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
vue头部导航动态点击处理方法
2018/11/02 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
python的即时标记项目练习笔记
2014/09/18 Python
Python处理文本换行符实例代码
2018/02/03 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python word转pdf代码实例
2019/08/16 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
python实现学生成绩测评系统
2020/06/22 Python
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
考研英语复习计划
2015/01/19 职场文书
工程部主管岗位职责
2015/02/12 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
教师节班会开场白
2015/06/01 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android