关于C# 设计模式 Composite 组合模式

关于C# 设计模式 Composite 组合模式

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

///Composite(组合)模式将对象组合成树形结构以表示“部分-整体”的层次结构,对单个对象和复合对象的使用具有一致性。
///add by jzh 2007-04-15
namespace DesignPattern
{
    abstract class Component
    {
        protected string strName;

        public Component(string name)
        {
            strName = name;
        }

        abstract public void Add(Component c);

        public abstract void DumpContents();
    }

    class Composite : Component
    {
        private ArrayList ComponentList = new ArrayList();

        public Composite(string s) : base(s) { }

        override public void Add(Component c)
        {
            ComponentList.Add(c);
        }

        public override void DumpContents()
        {
            Console.WriteLine("Node: {0}", strName);

            foreach (Component c in ComponentList)
            {
                c.DumpContents();
            }
        }
    }

    class Leaf : Component
    {
        public Leaf(string s) : base(s) { }

        override public void Add(Component c)
        {
            Console.WriteLine("Cannot add to a leaf");
        }

        public override void DumpContents()
        {
            Console.WriteLine("Node: {0}", strName);
        }
    }

    public class Client
    {
        Component SetupTree()
        {
            Composite root = new Composite("root-composite");
            Composite parentcomposite;
            Composite composite;
            Leaf leaf;

            parentcomposite = root;

            composite = new Composite("第一层 - first sibling - composite");
            parentcomposite.Add(composite);

            leaf = new Leaf("第一层 - second sibling - leaf");
            parentcomposite.Add(leaf);

            parentcomposite = composite;
            composite = new Composite("第二层 - first sibling - composite");
            parentcomposite.Add(composite);

            composite = new Composite("第二层 - second sibling - composite");
            parentcomposite.Add(composite);

            parentcomposite = composite;
            leaf = new Leaf("第三层 - first sibling - leaf");
            parentcomposite.Add(leaf);

            leaf = new Leaf("第三层 - second sibling - leaf");
            parentcomposite.Add(leaf);

            composite = new Composite("第三层 - third sibling - composite");
            parentcomposite.Add(composite);

            return root;
        }

        public static void Main(string[] args)
        {
            Component component;
            Client c = new Client();
            component = c.SetupTree();

            component.DumpContents();
            Console.ReadLine();
        }
    }
}

 

发表回复

您的电子邮箱地址不会被公开。