总结
如例中代码所示,你可以运用适配器(Adapter)模式来避免因外部库改变所带来的不便——倘若向上兼容。作为某个库的开发者,你应该独立编写适配器,使你的用户更简便地使用新版本的库,而不用去修改他们现有的全部代码。
GoF书中提出的适配器(Adapter)模式更倾向于运用继承而不是组成。这在强类型语言中是有利的,因为适配器(Adapter)事实上是一个目标类的子类,因而能更好地与类中方法相结合。
下面是HwLib适配器运用继承的范例:
class HwLibGofAdapter extends HwLib { // extending version 2.0 function hello() { return parent::greet(); } }
world()方法没有在类中提到,因为运用了继承,它已经是子类的一部分。
class AdapterTestCase extends UnitTestCase { function TestHwLibGofAdapter() { $lib =& new HwLibGofAdapter; $this->assertEqual( ‘Greetings and Salutations World!’ ,$lib->hello().$lib->world()); } }
为了更好的灵活性,我个人比较倾向于组成的方法(特别是在结合了依赖性倒置的情况下);尽管如此,继承的方法提供两种版本的接口,或许在你的实际运用中反而是一个提高灵活性的关键。
注:依赖性倒置原理
依赖性倒置原理(首先在http://www.objectmentor.com/resources/articles/dip.pdf中由Robert C. Martin提出)是一个面向对象编程的准则,它表明:高层次的模块不应该依赖于低层次的模块,而应依赖于抽取。一个简单的与适配器(Adapter)模式相结合的依赖性倒置原理范例可以在以下地址中找到:http://www.phplondon.org/wiki/DependencyInversion
适配器模式的重点是改变一个单独类的API。有一个与之相关的设计模式(本书中没有涵盖),称作正面(Facade)模式。正面(Facade)的目的是给由许多对象构成的整个子系统,提供更为简洁的接口——反过来就是封装一个单独类——可能是一个值得研究的模式,如果你正设法把你的代码与第三方库隔离开来的话。
本文链接:http://www.blueidea.com/tech/program/2008/6117.asp
出处:phpchina
责任编辑:bluehearts
上一页 php设计模式介绍之适配器模式 [3] 下一页
◎进入论坛网络编程版块参加讨论
|