您的位置:首页 > 其它

学习设计模式之Composite 模式

2005-03-09 17:27 591 查看
合成模式从字面上来理解即一个对象由其它几N个象组合而成,其N>=1(为什么说N会有时等于1呢,我是这么理解的,当一个对象中包括另一个对象时,它所包括的对象又包括N个其它对象,依次下去,可以看去与这个对象相关的对象会有M个这里M>1,但对象本身相对于它所包含的对象来说有只包含了一个)。多数关于Composite模式的文章都是与树结构相关联,这却是形容得太适合不过了,所以本文也不例外:

先看看树的构成:

我们在学数据结构时就知道树是由树枝节点与树叶构成,树枝节点可以有子的树枝节点与树叶,但树叶却不能有子的树枝节点或子的树叶。

下面是构成树的类图:

    abstract public class Tree

    public class Node : Tree

    public class Leaf : Tree

    合成模式#region 合成模式

            CompositePattern.Tree tree = new CompositePattern.Node("Root");

            CompositePattern.Node n1 = new CompositePattern.Node("TreeNodeLeft");

            n1.Add(new CompositePattern.Leaf("LeafLeft"));

            n1.Add(new CompositePattern.Leaf("LeafRight"));

            CompositePattern.Node n2 = new DesignPatterns.CompositePattern.Node("TreeNodeRight");

            CompositePattern.Node n21 = new DesignPatterns.CompositePattern.Node("SubTreeNodeLeft");

            n21.Add(new CompositePattern.Leaf("N21Left"));

            n2.Add(n21);

            tree.Add(n1);

            tree.Add(n2);

            label1.Text = tree.Display(1);

            CompositePattern.Tree subtree = tree.GetChild("TreeNodeRight");

            label2.Text = subtree.Display(1);

            CompositePattern.Tree subtree2 = tree.GetChild("TreeNodeLeft");

            label3.Text = subtree2.Display(1);

            #endregion

如有什麼講得不當的地方還請各位指出,非常感謝!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: