动态扩展Java应用 - 编程入门网
创建一个PricingPlan类的数组时,情况又如何呢?
类名: Trade
现在你可以将getCommissionPrice()方法修改为: 类名: Trade
如果不将例外处理的部分计算在内,这里的代码是我们见过最简单的。在需要加入新的标价计划时,也相对地简单。你只要在Trade类中的数组中创建就可以了。 我想你已经开始看到动态类载入的强大了吧。 你还可以改进这个设计,以便在加入新的价格计划时更加简单,上面方法的缺点是,在加入一个新的价格计划后,你仍然必须重新编译包含有Trade类的源代码。 动态扩展Java应用(4)时间:2010-12-17数据库/基于XML的类名、 想象一下,如果你将类的名字存放在一个数据库表、XML文件或者是一个纯文本文件时,会出现什么情况?在加入新的价格计划时,你只需要创建一个新的类,并且将它放到一个程序可以找到的地方,然后在数据库表或者文件中加入一个记录就可以了。这样在一个新的标价计划推出时,你就不必每次修改Trade类。这里我将使用纯文本文件来说明,因为这是最简单的方法。在一个真正的系统中,我将建议使用数据库或者是一个XML文件,因为它们更加灵活。该文本文件如下所示: 文件名: PricingPlans.txt
现在你就可以创建一个PricingPlanFactory类,它将可以根据传入的PlanId来返回一个IPricingPlan实例。这个类读取和分析该文本文件至一个Map中,这样它就可以很方便地根据PlanId进行查找。要注意的是,你也可以修改PricingPlanFactory类以使用一个数据库或者XML文件。 你可以重新设计Customer类,以便返回IPricingPlan实例而不是PlanId。这样的设计要比返回一个PlanId好,因为其它的类将不需知道它们必须传送PlanId到PricingPlanFactory()方法。这些类不需知道PricingPlanFactory的任何东西;它们只使用所需的IPricingPlan实例就可以了(前面我使用这个设计的原因是这样更便于表达我的观点)。 这些修改都可以在这篇文章的源代码包中的pricing_plan_factory package找到。 要注意的方面 在这篇文件附带的源代码包中(DynamicJavaSource.zip),每个pachage都包含有一个Test类。以下的表描述了这些包中包含有那些东西: Package 描述 no_interfaces 没有使用interfaces的例子 hard_coded_interfaces 使用interfaces,但是类名写入到源代码中的例子 string_interfaces 使用interfaces,类名以字符串的形式写到源代码中的例子 pricing_plan_factory 使用一个文本文件来得到一个类名的例子 对于类载入的方面,有个问题要注意:类载入的工作有时会出现意外。例如,如果调用 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |