快速业务通道

诊断Java代码: 深度优先访问器和中断的分派 - 编程入门网

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

诊断Java代码: 深度优先访问器和中断的分派

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

设计模式最多只能对快速集中到一个项目的简单设计提供很大帮助。但是,在一个特定环境中实现一种设计模式的最简单方法并不一定是显而易见的 ― 要做到这一点,有许多种方法。这个月,我们将讨论应用公共设计模式来产生简单、简短且健壮的代码的一些方法。

首先,让我们看一下两种模式,它们适用于许多不同的环境。在 设计模式(Erich Gamma 等,也称为“四从组(Gang of Four)”著,它介绍了该主题的一些基础知识(请参阅 参考资料))中讨论的所有设计模式中,我发现可最广泛应用的是 Composite 和 Visitor 模式。

让我们进一步研究这两种模式。

用 Composite 指定递归数据类型

很容易就可以看出为什么 Composite 模式是有用的。Composite 模式只是指定递归定义的数据类型的面向对象方法;这些机会始终出现在软件开发中。

研究递归定义的对象类型的能力是软件工程的最显著的特征之一(与数字设计成对比,系统是从有限状态的机器构建的)。

用 Visitor 扩展类层次结构

至于 Visitor 模式,它受到如此广泛应用的许多原因是它补充了 Composite 模式。

Visitor 常常被吹捧为无需实际修改现有复合类层次结构中的类就可扩展其功能的一种方法。但是,它们的能力远远不仅于此。

因为访问器允许您将一个类层次结构的某些功能与类本身分开,所以可以在各式各样的设置中使用它们,在这些设置中,从概念上很难将功能看作是那些类的固有部分。

这种现象常常出现在复合数据结构上的向下递归中。例如,考虑二叉树的类层次结构和确定树中的任何节点是否包含一个零的访问器:

清单 1. 带访问器的二叉树

abstract class Tree {   public abstract Boolean accept(TreeVisitor that); } class Leaf extends Tree {   public static final Leaf ONLY = new Leaf();   public Boolean accept(TreeVisitor that) {    return that.forLeaf(this);   } } class Branch extends Tree {   public int value;   public Tree left;   public Tree right;   public Branch(int _value, Tree _left, Tree _right) {    this.value = _value;    this.left = _left;    this.right = _right;   }   public Boolean accept(TreeVisitor that) {    return that.forBranch(this);   } } interface TreeVisitor {   public Boolean forLeaf(Leaf that);   public Boolean forBranch(Branch that); } class ZeroFinder implements TreeVisitor {   public Boolean forLeaf(Leaf that) {    return new Boolean(false);   }   public Boolean forBranch(Branch that) {    if (that.value == 0) { return new Boolean(true); }    boolean foundInLeft = that.left.accept(this).booleanValue();    boolean foundInRight = that.right.accept(this).booleanValue();    return new Boolean(foundInLeft || foundInRight);   } }

诊断Java代码: 深度优先访问器和中断的分派(2)

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

通过在 for*() 方法(“*”表示通配符,如“Leaf”或“Branch”)中保留这个零查找功能,把 Tree 类本身分开,我们获得这些优势:

我们防止了这些类的代码膨胀。如果每次需要一个新功能时我们就将新的方法添加到类中,那么它们将很快变得很大。

我们将所有零查找功能放在一个地方,使之便于维护。

访问器的缺点

现在,如“四人组”所提到的那样,使用访问器的主要缺点是将新类添加到复合层次结构中变得有点困难。也就是说,当不期望更改复合层次结

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