技术开发 频道

保留的图形对象API 简介

  在以下各节中,我将描述用来定义 RGO 编程框架(也称为 API)的类和方法。本文中讨论的所有类都在缺省 Java 包中。

  有两种不同的方法来持久地存储 Drawable 对象。第一种方法使用 Java 平台的 Serializable 接口和 ObjectStreams ,该方法需要的代码量最少。这种方法中,每个 Drawable 对象和所有可从该方法获得的对象都必须实现 Serializable 接口。第二种方法(称为“自存储”,或者显式地为持久字段的存储编码)需要更多编码,但产生的持久文件要小得多(通常不到那些使用 Serializable 生成的文件大小的一半)。在保存复杂图形时,这个大小差别是很重要的。例如,比较存储包含 25 个测试 DrawableText 对象的图形所需的空间 ― 使用 Serializable 接口创建的文件大小为 2,636 字节,而使用“自存储”方法创建的文件大小为 1,284 字节。

  在“自存储”方法中,持久保存的 drawables 继承了 PersistentDrawable 类。每个带新数据字段的 PersistentDrawable 子类必须定义 storeOn() 和 loadFrom() 方法。

  drawables 包

  在示例 drawables 包中找到的类是以表 1 中显示的层次结构组织起来的。

        表 1. drawables 包的类层次结构     

类名属性实现方法
Drawableabstract, publicdrawstoreOnloadFrom
DrawableBoxpublicdrawWorkerstoreOnloadFrom
DrawableLinepublicdrawWorkerstoreOnloadFrom
DrawableOvalpublicdrawWorkerstoreOnloadFrom
DrawableRectFormabstract, publicstoreOnloadFrom
DrawableBoxpublicdrawWorker
DrawableOvalpublicdrawWorker
DrawableSpritepublicdrawWorkerstoreOnloadFrom
DrawableTextpublicdrawWorkerstoreOnloadFrom

  我已经在 Drawable 或者 DrawableRectForm 超类中放置了尽可能多的公共行为。

  方法和构造器

  下列方法和构造器对于组成 drawables 包的类是公共的。

  clone() 方法

  标准 Java 类库的一个弱点是很少使用 java.lang.Cloneable 接口。很明显 Java 语言的设计者考虑到了克隆,因为 clone() 方法已在 java.lang.Object 类中定义。但他们还是决定在没有实现 Cloneable 接口的类中禁止该方法。让大多数类(如果不是所有的类)实现标准的克隆方法后,类(特别是象 Point 和 Rectangle 这样的简单数据结构类)产生一个一致的办法来复制这些对象。没有这个办法,您有时必须通过使用复制构造器,或者通过带有待复制对象字段的引用(作为参数)的普通构造器,或者通过目标类的其它一些工厂(factory)方法来创建对象的副本。这样的选择取决于目标类。它迫使复制代码要知道要进行复制的目标类型。通用克隆能力则无须这么做。 clone() 方法提供给了本文(在它实际可以使用的地方)中定义的所有类。

  toString() 方法

  每个类实现 toString() 方法。这样允许类的实例用在 String 实例所需的任何地方(比如用于打印实例)。在类不是 final(也就是说,类可以生成子类)的情况下, toString 行为在 toString() 方法(它生成类名称和括起的括号)和 bodyToString() 方法(它生成对象的内容)之间被分割。(这类似于通常用在 java.awt 和 javax.swing 包中的 toString() 方法和 paramString() 方法。)

  这个方法允许所有的子类使用公共 toString() 方法,而允许一个子类一个子类地进行特定格式编排。

  构造器类型 drawables 包中的每个类可以支持几种构造器类型:

  缺省构造器:这是一个不带参数的构造器。缺省构造器用于类 Drawable 的所有非抽象子类来支持持久对象的重新装入。如果在参数没有提供信息的情况下无法使对象处于可用状态,特殊的类就可能不提供缺省构造器。

  普通构造器:这个构造器提供在实例创建时指定的所有参数。

  备用构造器:这个构造器提供在实例创建时指定的参数子集(通常是常用的那些)。请注意,一些类不能提供备用构造器。

  复制构造器:这个构造器通过复制相同类的另一个实例来初始化新创建的对象。 clone() 方法使用它。这样,它就可以被提供 clone() 方法的任意类所使用。

  访问方法

  访问方法提供了对重要的私有(private)或者受保护的(protected)实例变量的公开(public)访问。要获取变量值,可以使用 get() 访问方法。要设置变量值,可以使用 set(...) 访问方法。通常,设置访问方法复制它的参数。这样就避免了类对任意传递对象的后继更改。一个例外是在 DrawableSequencer 中保存 Drawable 对象。访问方法经常声明为 final,以允许编译器优化它们的性能。

0
相关文章