时间:2021-07-01 10:21:17 帮助过:3人阅读
问题
你如何避免因外部库的API改变而带来的不便?假如你写了一个库,你能否提供一种方法允许你软件的现有用户进行完美地升级,即使你已经改变了你的API?为了更好地适宜于你的需要,你应该如何改变一个对象的接口?
解决方案
注:控制体模式
PHP适配器模式是控制体模式的最新范例。一个适配器(Adapter)的结构类似于代理服务器(Proxy)和修饰器(Decorator),而它们的不同之处在于,适配器(Adapter)的目的是改变封装类的接口,代理服务器(Proxy)和修饰器(Decorator)则是保持接口不变。
样本代码
让我们看看当API改变时,如何保护应用程序不受影响。假设你费尽心思寻找合适的库,最后终于找到了HwLib,一个(假设的)被设计用来发送信息的代码集。以下为引用的内容:
- // PHP4
- /**
- * the HwLib helps programmers everywhere write their first program
- * @package HelloWorld
- * @version 1
- */
- class HwLib {
- /**
- * Say “Hello”
- * @deprec this function is going away in the future
- * @return string
- */
- function hello() {
- return ‘Hello ‘;
- }
- /**
- * target audience
- * @return string
- */
- function world() {
- return ‘World!’;
- }
- }
下面是库运行的范例:
- $hw =& new HwLib;
- echo $hw->hello(), $hw->world();
HwLib有完备的说明文档。在文档中作者已经明确指出hello()方法会在未来的版本中不被支持(甚至淘汰)。接下来,现在假设第二版的HwLib已经发布。一个全新的greet()方法代替了hello()。下面是这个库的新版本(注释已被抽取掉):
- // version 2
- class HwLib {
- function greet() {
- return ‘Greetings and Salutations ‘;
- }
- function world() {
- return ‘World!’;
- }
http://www.bkjia.com/PHPjc/446448.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446448.htmlTechArticlePHP有很多值得学习的地方,这里我们主要介绍PHP适配器模式,接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问...