您现在的位置: 天极网 > 开发频道 > 动态扩展Java应用
全文

动态扩展Java应用

2001-11-26 16:24作者:QQ新人类出处:yesky责任编辑:方舟

  使用字符串来指定类名

  假定老板告诉你该公司又有两个新的价格计划,接着还有更多。这些价格计划是每交易$8或者$10。你决定要创建两个新的PricingPlan类: PricingPlan8 和 PricingPlan10。

  在这种情况下,你必须修改Trade类来包含这些新的价格计划。你可以加入更多的if/then/else句子,但这不是一个好方法,如果价格计划变得越来越多时,代码将会显得十分笨重。另一个选择是通过Class.forName() 方法来创建PricingPlan实例,而不是通过new。Class.forName()方法可让你通过一个字符串名字来创建实例,以下就是在Trade类中应用该方法的例子:

  类名: Trade

public double getCommissionPrice()
{
 double commissionPrice = 0.0;

 IPricingPlan plan;
 Class commissionClass;

 try
 {
  if( getCustomer().getPlanId() == 1 )
  {
   commissionClass = Class.forName( "string_interfaces.PricingPlan20" );
  }
  else
  {
   commissionClass = Class.forName( "string_interfaces.PricingPlan1510" );
  }

  plan = (IPricingPlan) commissionClass.newInstance();

  commissionPrice = plan.calculateCommission( this );
 }
 // ClassNotFoundException, InstantiationException, IllegalAccessException
 catch( Exception e )
 {
  System.out.println( "Exception occurred: " + e.getMessage() );
  e.printStackTrace();
 }

 return commissionPrice;
}

  这部分代码看起来的改进并不大。由于你必须加入例外处理的代码,它实际上变长了。不过,如果你要在Trade类中创建一个PricingPlan类的数组时,情况又如何呢?

  类名: Trade

public class Trade extends Object {

private Customer customer;

private static final String[]
pricingPlans = { "string_interfaces.PricingPlan20",
"string_interfaces.PricingPlan1510",
"string_interfaces.PricingPlan8",
"string_interfaces.PricingPlan10"
};

  现在你可以将getCommissionPrice()方法修改为:

  类名: Trade

public double getCommissionPrice()
{
double commissionPrice = 0.0;

IPricingPlan plan;
Class commissionClass;

try
{
commissionClass =
Class.forName( pricingPlans[ getCustomer().getPlanId() - 1 ] );

plan = (IPricingPlan) commissionClass.newInstance();

commissionPrice = plan.calculateCommission( this );
}
// ClassNotFoundException, InstantiationException, IllegalAccessException
catch( Exception e )
{
System.out.println( "Exception occurred: " + e.getMessage() );
e.printStackTrace();
}

return commissionPrice;
}

  如果不将例外处理的部分计算在内,这里的代码是我们见过最简单的。在需要加入新的标价计划时,也相对地简单。你只要在Trade类中的数组中创建就可以了。

  我想你已经开始看到动态类载入的强大了吧。

  你还可以改进这个设计,以便在加入新的价格计划时更加简单,上面方法的缺点是,在加入一个新的价格计划后,你仍然必须重新编译包含有Trade类的源代码。
共6页。 9 1 2 3 4 5 6 :

软件资讯·软件下载尽在天极软件

相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众