creativity is that spark of electricity before an explosion.
it allows us, in a single instance to explore all possibilities without hesitation.
Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
The classes and/or objects participating in this pattern are:
|
// Composite pattern -- Structural example
|
|
using System; using System.Collections; namespace DoFactory.GangOfFour.Composite.Structural { // MainApp test application class MainApp { static void Main() { // Create a tree structure Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root.Add(new Leaf("Leaf B")); Composite comp = new Composite("Composite X"); comp.Add(new Leaf("Leaf XA")); comp.Add(new Leaf("Leaf XB")); root.Add(comp); root.Add(new Leaf("Leaf C")); // Add and remove a leaf Leaf leaf = new Leaf("Leaf D"); root.Add(leaf); root.Remove(leaf); // Recursively display tree root.Display(1); // Wait for user Console.Read(); } } // "Component" abstract class Component { protected string name; // Constructor public Component(string name) { this.name = name; } public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void Display(int depth); } // "Composite" class Composite : Component { private ArrayList children = new ArrayList(); // Constructor public Composite(string name) : base(name) { } public override void Add(Component component) { children.Add(component); } public override void Remove(Component component) { children.Remove(component); } public override void Display(int depth) { Console.WriteLine(new String('-', depth) + name); // Recursively display child nodes foreach (Component component in children) { component.Display(depth + 2); } } } // "Leaf" class Leaf : Component { // Constructor public Leaf(string name) : base(name) { } public override void Add(Component c) { Console.WriteLine("Cannot add to a leaf"); } public override void Remove(Component c) { Console.WriteLine("Cannot remove from a leaf"); } public override void Display(int depth) { Console.WriteLine(new String('-', depth) + name); } } } and
Output expected:
-root
---Leaf A ---Leaf B ---Composite X -----Leaf XA -----Leaf XB ---Leaf C |
| [+] | .NET Enterprise provides a truly robust and scalable platform to build business applications on I.. |
| [+] | Case studies - Software in business |
| [+] | Artificial Neural Networks |
| [+] | Protocol Buffers - Google's Data Interchange Format |
| [+] | Oracle SQL |
| [+] | Software Testing |
| [+] | Silverlight and Ruby on Rails |
| [+] | Microsoft joins OpenAjax Alliance |
| [+] | Running C and Python in browser. Advent of the Low Level Virtual Machine |
