php教程:php设计模式介绍之适配器模式_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

php教程:php设计模式介绍之适配器模式

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:模式教程介绍一个
黑客防线网安网讯:  《PHP设计模式介绍》第十三章适配器模式    接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及...
  《PHP设计模式介绍》第十三章适配器模式
  
  接口的改变是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化我孩子的无数玩具中有一个简要地描述了这个两难局面:你无法合理安排一个不得其所的人。
  
  问题
  
  你如何避免因外部库的API改变而带来的不便?假如你写了一个库你能否提供一种方法允许你软件的现有用户进行完美地升级,即使你已经改变了你的API?为了更好地适宜于你的需要,你应该如何改变一个对象的接口?
  
  解决方案
  
  适配器(Adapter)模式为对象提供了一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常见接口,同时避免了因升级和拆解客户代码所引起的纠纷。
  
  考虑一下当(不是假设!)一个第三方库的API改变将会发生什么。过去你只能是咬紧牙关修改所有的客户代码,而情况往往还不那么简单。你可能正从事一项新的项目,它要用到新版本的库所带来的特性,但你已经拥有许多旧的应用程序,并且它们与以前旧版本的库交互运行地很好。你将无法证明这些新特性的利用价值,如果这次升级意味着将要涉及到其它应用程序的客户代码。
  
  注:控制体模式
  
  适配器(Adapter)模式是控制体模式的最新范例。一个适配器(Adapter)的结构类似于代理服务器(Proxy)和修饰器(Decorator),而它们的不同之处在于,适配器(Adapter)的目的是改变封装类的接口,代理服务器(Proxy)和修饰器(Decorator)则是保持接口不变。
  
  样本代码
  
  让我们看看当API改变时,如何保护应用程序不受影响。
  
  假设你费尽心思寻找合适的库,最后终于找到了HwLib,一个(假设的)被设计用来发送信息的代码集。
  
  下面是HwLib类的源代码:
  
  //PHP4
  
  /**
  
  *theHwLibhelpsprogrammerseverywherewritetheirfirstprogram
  
  *@packageHelloWorld
  
  *@version1
  
  */
  
  classHwLib{
  
  /**
  
  *Say“Hello”
  
  *@deprecthisfunctionisgoingawayinthefuture
  
  *@returnstring
  
  */
  
  functionhello(){
  
  return‘Hello‘;
  
  }
  
  /**
  
  *targetaudience
  
  *@returnstring
  
  */
  
  functionworld(){
  
  return‘World!’;
  
  }
  
  }
  
  下面是库运行的范例:
  
  $hw=&newHwLib;
  
  echo$hw->hello(),$hw->world();
  
  HwLib有完备的说明文档。在文档中作者已经明确指出hello()方法会在未来的版本中不被支持(甚至淘汰)。
  
  接下来,现在假设第二版的HwLib已经发布。一个全新的greet()方法代替了hello()。
  
  下面是这个库的新版本(注释已被抽取掉):
  
  //version2
  
  classHwLib{
  
  functiongreet(){
  
  return‘GreetingsandSalutations‘;
  
  }
  
  functionworld(){
  
  return‘World!’;
  
  }
  
  }
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17481-1.html
网站维护教程更新时间:2012-09-21 05:19:40  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer