登录  /  注册

快速入门:PHP适配器模式简述_PHP教程

php中文网
发布: 2016-07-15 13:28:32
原创
855人浏览过

php有很多值得学习的地方,这里我们主要介绍php适配器模式,接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。我孩子的无数玩具中有一个简要地描述了这个两难局面:你无法合理安排一个不得其所的人。

问题

你如何避免因外部库的API改变而带来的不便?假如你写了一个库,你能否提供一种方法允许你软件的现有用户进行完美地升级,即使你已经改变了你的API?为了更好地适宜于你的需要,你应该如何改变一个对象的接口?

解决方案

PHP适配器模式为对象提供了一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常见接口,同时避免了因升级和拆解客户代码所引起的纠纷。考虑一下当(不是假设!)一个第三方库的API改变将会发生什么。过去你只能是咬紧牙关修改所有的客户代码,而情况往往还不那么简单。你可能正从事一项新的项目,它要用到新版本的库所带来的特性,但你已经拥有许多旧的应用程序,并且它们与以前旧版本的库交互运行地很好。你将无法证明这些新特性的利用价值,如果这次升级意味着将要涉及到其它应用程序的客户代码。

注:控制体模式

PHP适配器模式是控制体模式的最新范例。一个适配器(Adapter)的结构类似于代理服务器(Proxy)和修饰器(Decorator),而它们的不同之处在于,适配器(Adapter)的目的是改变封装类的接口,代理服务器(Proxy)和修饰器(Decorator)则是保持接口不变。

样本代码

让我们看看当API改变时,如何保护应用程序不受影响。假设你费尽心思寻找合适的库,最后终于找到了HwLib,一个(假设的)被设计用来发送信息的代码集。以下为引用的内容:

<ol class="dp-xml">
<li class="alt"><span><span>// PHP4  </span></span></li>
<li class=""><span>/**  </span></li>
<li class="alt"><span>* the HwLib helps programmers everywhere write their first program  </span></li>
<li class=""><span>* @package HelloWorld  </span></li>
<li class="alt"><span>* @version 1  </span></li>
<li class=""><span>*/  </span></li>
<li class="alt"><span>class HwLib {  </span></li>
<li class=""><span>/**  </span></li>
<li class="alt"><span>* Say “Hello”  </span></li>
<li class=""><span>* @deprec this function is going away in the future  </span></li>
<li class="alt"><span>* @return string  </span></li>
<li class=""><span>*/  </span></li>
<li class="alt"><span>function hello() {  </span></li>
<li class=""><span>return ‘Hello ‘;  </span></li>
<li class="alt"><span>}  </span></li>
<li class=""><span>/**  </span></li>
<li class="alt"><span>* target audience  </span></li>
<li class=""><span>* @return string  </span></li>
<li class="alt"><span>*/  </span></li>
<li class=""><span>function world() {  </span></li>
<li class="alt"><span>return ‘World!’;  </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span>} </span></li>
</ol>
登录后复制

下面是库运行的范例:

<ol class="dp-xml">
<li class="alt"><span><span>$</span><span class="attribute"><font color="#ff0000">hw</font></span><span> =&amp; new HwLib;  </span></span></li>
<li class="">
<span>echo $hw-</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>hello(), $hw-</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>world(); </span>
</li>
</ol>
登录后复制

HwLib有完备的说明文档。在文档中作者已经明确指出hello()方法会在未来的版本中不被支持(甚至淘汰)。接下来,现在假设第二版的HwLib已经发布。一个全新的greet()方法代替了hello()。下面是这个库的新版本(注释已被抽取掉):

<ol class="dp-xml">
<li class="alt"><span><span>// version 2  </span></span></li>
<li class=""><span>class HwLib {  </span></li>
<li class="alt"><span>function greet() {  </span></li>
<li class=""><span>return ‘Greetings and Salutations ‘;  </span></li>
<li class="alt"><span>}  </span></li>
<li class=""><span>function world() {  </span></li>
<li class="alt"><span>return ‘World!’;  </span></li>
<li class=""><span>}  </span></li>
</ol>
登录后复制

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446448.htmlTechArticlePHP有很多值得学习的地方,这里我们主要介绍PHP适配器模式,接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问...
智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号