快速业务通道

关于PHP网站计数器程序代码

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
得第二版本HwLib的实例的一个引用,并且把它加入到你的Adapter类中 。

class HwLibV2ToV1Adapter {
var $libv2;
function HwLibV2ToV1Adapter (&$libv2) {
$this->libv2 =& $libv2;
}
}

这个范例展示 了将这个实例传递给构造函数的过程,你也可以运用Factory 或 Singleton ,或者其它适合你要求的创 建模式,来创建一个新的实例。(通过前两章,你应该对HwLibV2ToV1Adapter的编写用途很熟悉了)

当得到第二版本HwLib的时候,你如何使它在第一版本HwLib的实例中体现?

class HwLibV2ToV1Adapter {
var $libv2;
function HwLibV2ToV1Adapter (&$libv2) {
$this->libv2 =& $libv2;
}
function hello() {
return $this- >libv2->greet();
}
function world() {
return $this->libv2- >world();
}
}

HwLibV2ToV1Adapter::hello()方法代表了$libv2对象的 greet()方法。

接着,你该如何在程序中使用它?

class AdapterTestCase extends UnitTestCase {
function TestOriginalAppWithAdapter() {
$lib =& new HwLibV2ToV1Adapter(new HwLib);
$this->assertEqual(
‘Greetings and Salutations World!’
,$lib->hello().$lib->world());
}
}

刚才的程序测试和现在的程序代码都有一定程度的脆弱性。有没有方法在长久的使用中 让它们都更易于维护呢?当然是有的!

回忆一下(第三章)Factory是如何提供一个更灵活的方法 来创建类的实例的。为了更好地在将来检验这些代码,就从一个简单的Factory函数开始:

function &HwLibInstance() {

return new HwLib;

}

为了测试 Factory,直接调用它而不创建它的实例:

class AdapterTestCase extends UnitTestCase {
function TestAppWithFactory() {
$lib =& HwLibInstance();
$this- >assertWantedPattern(
‘/\w+ World!$/’
,$lib->hello().$lib- >world());
}
}

有两个方面需要注意:Factory创建了对象,而用于确认 的assertEqual()函数被修改为更灵活的assertWantedPattern()。你现在可以用一个正则表达式来捕获 你在库中所要查找的“核心”,但可能会使这个测试本身变得脆弱。

接下来,升级 HwLib库。当安装了HwLib第二版,你就可以修改HwLibInstance()函数来适应新的版本。

function &HwLibInstance($ver=false) {
switch ($ver) {
case ‘V2’:
return new HwLib;
default:
return new HwLibV2ToV1Adapter (new HwLib);
}
}

现在重新运行AdapterTestCase。测试通过!(绿色进度条 正常。)因为原始的程序没有传递一个参数,HwLibInstance会默认返回封装在HwLibV2toV1Adapter中的 HwLib的一个实例。尽管如此,如果你编写了新的代码,你可以传递进一个“V2”的参数让这 个函数自动选择HwLib的新版本而不用去调整它。

以后,如果你选择升级HwLib的第三版,应该将 Factory做如下的调整:

function &HwLibInstance($ver=false) {
switch ($ver) {
case ‘V3’:
return new HwLib;
case ‘V2’:
return new HwLibV3ToV2Adapter(new HwLib);
default:
return new HwLibV2ToV1Adapter(
new HwLibV3ToV2Adapter(new HwLib));
}
}

总 结

如例中代码所示,你可以运用适配器(Adapter)模式来避免因外部库改变所带来的不便 ——倘若向上兼容。作为某个库的开发者,你应该独立编写适配器,使你的用户更简便地使 用新版本的库,而不用去修改他们现有的全部代码。

GoF书中提出的适配器(Adapter)模式更倾向 于运用继承而不是组成。这在强类型语言中是有利的,因为适配器(Adapter)事实上是一个目标类的子类 ,因而能更好地与类中方法相结合。

下面是Hw

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号