抽象单位类,Soldier和TroopUnit的基类:
package com.sitinspring;
/** *//**
* 抽象单位类,Soldier和TroopUnit的基类
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/
public abstract class Unit {
// 单位名
protected String name;
// 所在单位
protected TroopUnit currTroopUnit;
protected static final String TAB = " ";
public Unit(String name) {
this.name = name;
}
// 打印信息,强制子类实现
public abstract void printInfo(String tabs);
// 取得单位的绝对路径
public String getPath() {
StringBuffer sb = new StringBuffer();
TroopUnit troopUnitointer = currTroopUnit;
if (troopUnitointer == null) {
return "顶级";
}
while (troopUnitointer != null) {
// 取得的单位名放置在前方
sb.insert(0, troopUnitointer.name + "/");
// 继续向上回溯
troopUnitointer = troopUnitointer.currTroopUnit;
}
return sb.toString();
}
public void setCurrTroopUnit(TroopUnit currTroopUnit) {
this.currTroopUnit = currTroopUnit;
}
public void setName(String name) {
this.name = name;
}
public TroopUnit getCurrTroopUnit() {
return currTroopUnit;
}
public String getName() {
return name;
}
}
Soldier类:
package com.sitinspring;
/** *//**
* Soldier类,继承自Unit
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/
public class Soldier extends Unit{
public Soldier(String name){
super(name);
}
/** *//**
* 打印士兵的信息
*/
public void printInfo(String tabs){
System.out.println(tabs+" 士兵名="+name+" path="+getPath());
}
}
军事建制单位类:
package com.sitinspring;
import java.util.ArrayList;
import java.util.List;
/** *//**
* 军事建制单位类,继承自Unit
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/
public class TroopUnit extends Unit{
// 属下的单位集合,包括士兵及建制单位
private List<Unit> units;
public TroopUnit(String name) {
super(name);
}
// 删除一个单位
public void remove(Unit unit) {
units.remove(unit);
}
// 添加一个单位
public void add(Unit unit) {
if (units == null) {
units = new ArrayList<Unit>();
}
units.add(unit);
// 设置添加单位的所在单位为自身
unit.setCurrTroopUnit(this);
}
/** *//**
* 按名字查找
* @param name
* @param foundUnits
*/
public void findbyName(String name,List<Unit> foundUnits) {
// 对空目录进行检查,以防空指针异常发生
if (units == null) {
return;
}
// 遍历查找
for (Unit unit : units) {
if (unit instanceof TroopUnit) {
// 找到目录
TroopUnit troopUnit = (TroopUnit) unit;
if (troopUnit.units == null
|| troopUnit.units.size() == 0) {
continue ;
} else {
// 有子单位则继续向下递归遍历
troopUnit.findbyName(name,foundUnits);
}
} else {
Soldier soldier = (Soldier) unit;
if (soldier.getName().contains(name)) {
foundUnits.add(soldier);
}
}
}
}
/** *//**
* 打印单位信息,包括其下包括的单位
*/
public void printInfo(String tabs) {
// 输出本身的信息
System.out.println(tabs + " 单位名=" + name + " path=" + getPath());
// 对属下的单位集合进行检查,以防空指针异常发生
if (units == null) {
return;
}
// 将属下的单位集合中的文件目录信息也打印出来
for (Unit unit : units) {
// tabs + TAB是让下到一层目录就缩进一次
unit.printInfo(tabs + TAB);
}
}
}
调用:
package com.sitinspring;
import java.util.ArrayList;
import java.util.List;
/** *//**
* 程序入口
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/
public class Main{
public static void main(String[] args){
// 一级一级的建立体系结构
Soldier xsd=new Soldier("许三多");
TroopUnit sanban=new TroopUnit("三班");
sanban.add(xsd);
Soldier xsd1=new Soldier("许二多");
TroopUnit wuban=new TroopUnit("五班");
wuban.add(xsd1);
TroopUnit yipai=new TroopUnit("一排");
yipai.add(sanban);
yipai.add(wuban);
TroopUnit qilian=new TroopUnit("七连");
qilian.add(yipai);
Soldier wuliuyi=new Soldier("伍六一");
TroopUnit yiban=new TroopUnit("一班");
yiban.add(wuliuyi);
TroopUnit yipai1=new TroopUnit("一排");
yipai1.add(yiban);
TroopUnit yilian=new TroopUnit("一连");
yilian.add(yipai1);
TroopUnit yiying=new TroopUnit("一营");
yiying.add(qilian);
yiying.add(yilian);
TroopUnit zhuangjiatuan=new TroopUnit("装甲团");
zhuangjiatuan.add(yiying);
TroopUnit zhuangjiashi=new TroopUnit("装甲师");
zhuangjiashi.add(zhuangjiatuan);
TroopUnit sanshibajun=new TroopUnit("甲种军");
sanshibajun.add(zhuangjiashi);
// 打印整体结构
sanshibajun.printInfo("");
// 找出名字中包含"许"的士兵
List<Unit> foundUnits=new ArrayList<Unit>();
sanshibajun.findbyName("许", foundUnits);
// 打印找出的单位
for(Unit unit:foundUnits){
unit.printInfo("");
}
}
}
执行结果:
单位名=甲种军 path=顶级
单位名=装甲师 path=甲种军/
单位名=装甲团 path=甲种军/装甲师/
单位名=一营 path=甲种军/装甲师/装甲团/
单位名=七连 path=甲种军/装甲师/装甲团/一营/
单位名=一排 path=甲种军/装甲师/装甲团/一营/七连/
单位名=三班 path=甲种军/装甲师/装甲团/一营/七连/一排/
士兵名=许三多 path=甲种军/装甲师/装甲团/一营/七连/一排/三班/
单位名=五班 path=甲种军/装甲师/装甲团/一营/七连/一排/
士兵名=许二多 path=甲种军/装甲师/装甲团/一营/七连/一排/五班/
单位名=一连 path=甲种军/装甲师/装甲团/一营/
单位名=一排 path=甲种军/装甲师/装甲团/一营/一连/
单位名=一班 path=甲种军/装甲师/装甲团/一营/一连/一排/
士兵名=伍六一 path=甲种军/装甲师/装甲团/一营/一连/一排/一班/
士兵名=许三多 path=甲种军/装甲师/装甲团/一营/七连/一排/三班/
士兵名=许二多 path=甲种军/装甲师/装甲团/一营/七连/一排/五班/
代码下载:
http://www.blogjava.net/Files/sitinspring/TroopTree20071204123647.rar