using System; using System.Collections.Generic; namespace CompositePatternDemo { class Program { static void Main(string[] args) { IStoreElement myStore = generate(); Console.WriteLine(myStore.ListOut()); } static IStoreElement generate() { IStoreElement subcat1 = new StoreCategory("Foods", new List { new StoreItem("Bread"), new StoreItem("Veggies"), new StoreItem("Cheese"), new StoreCategory("Drinks", new List { new StoreItem("Juice"), new StoreItem("Mineral water"), }) }); IStoreElement subcat2 = new StoreCategory("Chems", new List { new StoreItem("Toothpaste"), new StoreItem("Shampoo"), new StoreItem("Soap") }); IStoreElement item1 = new StoreItem("Painkillers"); IStoreElement item2 = new StoreItem("Lottery ticket"); IStoreElement result = new StoreCategory("Local shop", new List { subcat1, subcat2, item1, item2 }); return result; } } public interface IStoreElement { string Name { get; set; } string ListOut(int indent = 0); } public class StoreItem : IStoreElement { public string Name { get; set; } public StoreItem(string _name) { Name = _name; } public string ListOut(int indent = 0) { string result = ""; for (int i = indent; i > 0; i--) { result += "-"; } result += String.Format("Item: {0}", Name); return result; } } public class StoreCategory : IStoreElement { public string Name { get; set; } private IList members; public StoreCategory(string _name, IList _members) { Name = _name; members = _members; } public string ListOut(int indent = 0) { string result = ""; for (int i = indent; i > 0; i--) { result += "-"; } result += String.Format("Category: {0}", Name); foreach (IStoreElement element in members) { result += String.Format("\n{0}", element.ListOut(indent + 1)); } return result; } } }