Csharp/C Sharp/Design Patterns/Composite Pattern — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 11:38, 26 мая 2010

Composite Pattern Demo

 
using System;
using System.Text;
using System.Collections;
public abstract class Unit {
    protected string name;
    public abstract void Add(Unit e);
    public abstract void Remove(Unit e);
    public abstract void GetChild(int level);
    public Unit(string name) {
        this.name = name;
    }
}

public class Office : Unit {
    public override void Add(Unit c) {
        Console.WriteLine("Can"t use "Add" in Office!");
    }
    public override void Remove(Unit e) {
        Console.WriteLine("Can"t use "Remove" in Office! ");
    }
    public override void GetChild(int level) {
        Console.WriteLine(new string("*", level) + this.name);
    }
    public Office(string name) : base(name) {}
}

public class Branch : Unit {
    private ArrayList node = new ArrayList();
    public override void Add(Unit e) {
        node.Add(e);
    }
    public override void Remove(Unit e) {
        node.Remove(e);
    }
    public override void GetChild(int level) {
        Console.WriteLine(new String("#", level) + this.name);
        foreach (Unit e in this.node)
            e.GetChild(level + 1);
    }
    public Branch(string name) : base(name) {}
}
public class Client {
    static void Main(string[] args) {
        Branch root = new Branch("US (Root)");
        Office ny = new Office("A (Unit)");
        Office ca = new Office("B (Unit)");
        root.Add(ny);
        root.Add(ca);
        Branch rootHawaii = new Branch("Canada Branch (Branch)");
        root.Add(rootHawaii);
        Branch branchUK = new Branch("UK Branch (Branch)");
        Office ldnc = new Office("C Office (Unit)");
        Office ldnw = new Office("D Office (Unit)");
        branchUK.Add(ldnc);
        branchUK.Add(ldnw);
        root.Add(branchUK);
        Office dummy = new Office("D Office");
        ldnc.Add(dummy);
        root.GetChild(0);
        root.Remove(rootHawaii);
        branchUK.Remove(ldnc);
        Console.WriteLine("Remove Hawaii branch and London City office");
        root.GetChild(0);
    }
}