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

开发 后端
PHP适配器模式为对象提供了一种完全不同的接口,你可以运用适配器(Adapter)来实现一个不同的类的常见接口。

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

问题

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

解决方案

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

注:控制体模式

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

样本代码

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

  1. // PHP4  
  2. /**  
  3. * the HwLib helps programmers everywhere write their first program  
  4. * @package HelloWorld  
  5. * @version 1  
  6. */  
  7. class HwLib {  
  8. /**  
  9. * Say “Hello”  
  10. * @deprec this function is going away in the future  
  11. * @return string  
  12. */  
  13. function hello() {  
  14. return ‘Hello ‘;  
  15. }  
  16. /**  
  17. * target audience  
  18. * @return string  
  19. */  
  20. function world() {  
  21. return ‘World!’;  
  22. }  

下面是库运行的范例:

  1. $hw =& new HwLib;  
  2. echo $hw->hello(), $hw->world(); 

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

  1. // version 2  
  2. class HwLib {  
  3. function greet() {  
  4. return ‘Greetings and Salutations ‘;  
  5. }  
  6. function world() {  
  7. return ‘World!’;  
  8. }  
责任编辑:田树 来源: 博客
相关推荐

2020-10-25 08:56:21

适配器模式

2012-05-16 17:22:11

Java设计模式

2022-02-18 17:21:29

适配器模式客户端

2021-02-18 08:39:28

设计模式场景

2013-11-26 16:39:21

Android设计模式

2022-02-13 23:33:24

设计模式Java

2024-07-31 10:41:16

C#设计模式

2012-08-02 10:46:34

JavaAdapter模式

2024-02-22 12:13:49

适配器模式代码

2024-04-10 12:27:43

Python设计模式开发

2013-02-26 10:55:47

C#适配器设计模式

2021-02-16 08:16:09

适配器模式MybatisJava

2012-04-12 09:33:02

JavaScript

2022-12-12 09:20:59

适配器模式接口

2022-05-29 22:55:00

适配器设计模式

2021-08-16 17:15:19

设计模式Android适配器模式

2012-09-19 15:29:26

Worklight适配器

2023-09-06 13:20:00

适配器模式兼容性

2009-12-21 10:26:09

Oracle适配器

2018-10-11 10:38:31

前端JavaScript编程语言
点赞
收藏

51CTO技术栈公众号