当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

诊断Java代码: 深度优先访谒器和中止的分配[Java编程]

赞助商链接



  本文“诊断Java代码: 深度优先访谒器和中止的分配[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

计划情势最多只能对快速集合到一个项目的简单计划供应很大帮忙.但是,在一个特定环境中实现一种计划情势的最简单办法并不一定是显而易见的 ― 要做到这一点,有很多种办法.这个月,我们将谈论利用大众计划情势来产生简单、简短且结实的代码的一些办法.

首先,让我们看一下两种情势,它们实用于很多差别的环境.在 计划情势(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代码: 深度优先访谒器和中止的分配[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 诊断Java代码 - 筹划"可测试的"操纵程序
  • <b>诊断Java代码: 臆想实现错误情势,第2部份</b>
  • 诊断Java代码: 筹划可扩大的操纵程序,第2部份
  • 诊断Java代码::Split Cleaner错误情势
  • 诊断Java代码: Fictitious Implementation错误情势,第1部份
  • 诊断Java代码:筹划可扩大的操纵程序,第1部份
  • 诊断Java代码:孤线程(Orphaned Thread)错误情势
  • 诊断Java代码
  • 诊断Java代码: 单元测试与自动化代码解析协同工作
  • 诊断Java代码: Repl供应交互式评价
  • 诊断Java代码: Liar View错误情势
  • 诊断Java代码: Java编程中的断言和时态逻辑
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .