快速业务通道

诊断Java代码: 设计可扩展的应用程序,第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

诊断Java代码: 设计可扩展的应用程序,第2部分

时间:2011-02-11 IBM Eric E. Allen

玻璃箱可扩展性是指这样一种方式:软件系统可在源代码可以查看而不可以修改时被扩展 ― 它是黑箱设计(在这里构建扩展时,不查看原始代码)和开放箱设计(扩展代码直接写入到基础代码)的折衷。因为新的扩展直接建立在原始代码基础上,但不改动原始代码,所以,玻璃箱设计或许是扩展一个软件系统最有效、最安全的方法。在 诊断 Java 代码的这一部分中,Eric Allen 详述了上个月谈及的玻璃箱可扩展性主题。读完本文后,您将知道什么时候使用玻璃箱,并将获得一些如何实现它的提示。

随着信息处理任务(和与之相关的成本)多样性的增长,很明显,在技术预算紧缩的形势下,增大代码重用的程度是一种有效的设计(和商业)策略。如果系统的可扩展性是您的目标,那就问问您自己,“系统应该具有多大的可扩展性以及我能使系统具有多大的可扩展性?”然后考虑以下事实:

增加可扩展性的代价是性能和可测试性的降低。

可测试性最好的系统通常也是最简单的系统;增加可扩展性常常增加复杂性。

要制定一个成功的可扩展设计计划,关键的一点是知道您计划将来怎样扩展该系统。

在本系列的 第 1 篇文章中,我概述了系统可能展现出来的各种可扩展性形式 ― 黑箱设计以及两种 白箱设计,即 玻璃箱和 开放箱。接下来,我们将更深入地探讨这些形式。

我们将从玻璃箱可扩展性开始我们的旅程。

玻璃箱中的对等元素

早些时候,我已把玻璃箱可扩展性定义为这样一种方式:软件系统可在源代码可以被查看而不可以被修改时被扩展。主要有两种方向,程序可顺着这些方向成为玻璃箱可扩展,它们是:

数据的扩展

这些数据的功能性的扩展

选择使一个程序顺着这个两维空间中的任意一维可扩展都将影响到程序的结果体系结构。在多数情况下,这个决定也将对性能产生影响。

数据作为可扩展的一维

让我们首先来考虑最自然地包含在面向对象语言(例如 Java)中的可扩展性的维 ― 数据。在面向对象的语言中,某些最本质的构造(即类层次结构、接口和抽象方法)主要是为了允许顺着该维的可扩展性而被包括。

要扩展一个复合数据结构以包含新的子类型,只需定义一个被声明成继承原始复合数据结构的根的新类就可以做到。例如,考虑如下简单的用于二叉树的类层次结构:

清单 1. 一个简单的用于二叉树的类层次结构

abstract class Tree { } class Branch extends Tree {   private int value;   private Tree left;   private Tree right;   public Branch(int _value, Tree _left, Tree _right) {    this.value = _value;    this.left = _left;    this.right = _right;   }   public Tree getLeft() {    return this.left;   }   public Tree getRight() {    return this.right;   }   public int getValue() {    return this.value;   } } class Leaf extends Tree { }

诊断Java代码: 设计可扩展的应用程序,第2部分(2)

时间:2011-02-11 IBM Eric E. Allen

如果我们想增加一种新形式的二叉树,例如非空叶节点,则我们所要做的全部是象下面这样定义一个新的类:

清单 2. 定义一个用于非空叶的新类

class NonEmptyLeaf extends Tree {   private int value;   public NonEmptyLeaf(int _value) {    this.value = _value;   }   public int getValue() {    return value;   } }

用“访问者(Visitor)”扩展二叉树

作为一种选择,如果我们想允许容易地扩展提供给这些树的功能性,但对允许新的子类型的可扩展性并不这么感兴趣,则我们可以对树的访问者提供支持。

访问者模式(Visitor Pattern)是讨论

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