诊断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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |