快速业务通道

在PropertyResourceBundles中引入继承 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
属性在组件中使用,同时从另一个束中继承其它属性。一个属性只需定义一次。其它组件可以简单地继承这个属性。

另外一种选择是,一个组件可以决定继承的属性不适合自己使用,然后重新定义该属性 ― 这种概念类似于面向对象编程中的覆盖方法或属性。

增加继承还减少了维护工作,因为每个属性都被定义在层次结构中明确的位置上。如图 1 所示,被更改的属性会影响从发生更改的束继承而来的所有的束。

图 1. 资源束继承层次结构的示例

在PropertyResourceBundles中引入继承 - 编程入门网

设计目的

为实现我们的策略,首先我们需要设计继承的机制。在设计机制时要牢记,我们要设法尽量减少现有代码和现有资源束的必需的更改。

为了使现有代码使用继承束,我们需要合并一些最小限度的更改,包括从 PropertyResourceBundle 到新的对象类型的转换并使用一个新的 管理器类(稍后我会讨论这个类)。

现有的资源束需要重新定义吗?不。这种方法的一个显著的副作用就是,现有的资源束可以变成整个继承结构的基础,而无须对这些资源束进行改变。现有的资源束可以按原样使用。

另一个设计目的是为了能够在代码 内和代码 外(在将列出一个给定束的关系的另一个文件中)都能定义束关系层次结构。这种方法为您提供了在代码外定义关系的机会,这样会使修改和维护更加容易。也可以在代码内改变层次结构,这样就可以在运行时为开发人员提供精细的控制。

实现设计

新实现的主要功能是提供描述束之间的关系的继承机制。

与 Java 语言的 类继承不同,每个新束都被允许从多个父束中逻辑地继承属性。

新类:InheritedPropertyResourceBundle

为实现这些思想,我们将创建一个继承 java.util.ResourceBundle 类的新类。新类将保持对 PropertyResourceBundle 的单独引用,还有对任意数量的父束(被 InheritedPropertyResourceBundle 的这个实例逻辑地继承的束 ― 请参阅清单 1)的可选的引用。

在PropertyResourceBundles中引入继承(3)

时间:2011-02-06 Eric A. Olson

清单 1. InheritedPropertyResourceBundle 类的开头

/** * The class for representing an inherited PropertyResourceBundle. * This class incorporates all the features of the * java.util.PropertyResourceBundle while adding the notion of * inheritance. The inheritance relationships can be defined * in-line, or they can be provided in a relationships file which * is locatable by the given ClassLoader. This file must be * named <resource_base_name>.relationships. * @see java.util.PropertyResourceBundle */ public class InheritedPropertyResourceBundle extends ResourceBundle {   /**    * Describes the parent relationships to other    * Inherited PropertyResourceBundles. These parent bundles    * will be checked if any key cannot be found in this bundle.    */   private Vector relationships = null;   /**    * The java.util.ResourceBundle that backs this instance.    * This bundle will always be checked first for any key.    */   private ResourceBundle instance = null;

注意:请参阅 参考资料下载本文中使用的完整的源代码。

如清单 2 所示,当 InheritedPropertyResourceBundle 按照给定的键查询时,将首先检查提供支持的 PropertyResourceBundle 来查找资源。

清单 2. 用给定的键检查 PropertyResourceBundle

Object retVal = null;     try {      // check the PropertyResourceBundle for the resource.      retVal = instance.getObject(key);     } catch (MissingResourceException mre) {     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号