[導入]TreeNode:長程關(guān)聯(lián)
Posted on 2005-11-19 10:59 canonical 閱讀(352) 評論(0) 編輯 收藏 所屬分類: Witrix開發(fā)平臺java中最常用的數(shù)據(jù)結(jié)構(gòu)類型是Map和List, 它們也是Container的兩種基本模式,一個是根據(jù)特征值定位,一個是根據(jù)地址定位。 它們共同的一個特征是表達了數(shù)據(jù)之間的直接的,短程的一種相關(guān)性。另一種常見的數(shù)據(jù)結(jié)構(gòu)Tree則表達了數(shù)據(jù)之間的一種長程的關(guān)聯(lián):根節(jié)點與其所有層次上 的子節(jié)點之間都存在著關(guān)聯(lián)。 文件系統(tǒng),組織機構(gòu), XML文檔等都可以對應(yīng)為Tree數(shù)據(jù)結(jié)構(gòu)。在描述樹形結(jié)構(gòu)的時候,我們經(jīng)常使用XML文件, 但是XML文件在程序中操縱起來并不方便,這其中的一個重要原因是XML是面向文檔的,即操縱XML的API返回的和使用的都只能是文本字符串,而不能直 接使用程序中常見的其他數(shù)據(jù)結(jié)構(gòu)。在witrix平臺中操縱Tree結(jié)構(gòu)的標準接口是TreeNode類,它的設(shè)計是面向應(yīng)用的,即節(jié)點的屬性值為 Object類型而不是String類型。
Tree由三部分組成: 屬性,值, 子節(jié)點
class TreeNode implements IVariant{
List getChildren();
int getChildCount();
TreeNode child(int index);
/** 當name對應(yīng)的節(jié)點不存在時將會自動創(chuàng)建該節(jié)點 */
TreeNode child(String name);
/** 當name對應(yīng)的節(jié)點不存在時返回null */
TreeNode existingChild(String name);
Map getAttributes();
IVariant attribute(String name);
void setAttribute(String name, Object attrValue);
}
TreeNode.attribute(name)返回的是IVariant接口,例如
boolean defaultValue = true;
boolean b = node.child("subA").attribute("attrB").booleanValue(defaultValue);
TreeNode本身也是IVariant接口的一個實現(xiàn),例如
int i = ode.intValue();