16 Eyl 2015

Composite Pattern

Author: strongsoul | Filed under: Teknik

Composite tasarım deseni bir yapının hiyerarşik olarak iç içe kullanılmasını sağlamak için kullanılabilir, en üst kırılımda bir tetikleme olduğunda en alt katmana kadar etkileşim sağlayan bir yapıdır bir nevi kelebek etkisinin kodlanmış halidir 😛

hadi kodlayalım

using System; 
using System.Collections.Generic; 

namespace CompositePattern
{
	abstract class Component 
	{ 
		protected string name; 
		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); 
	}

	class Composite : Component 
	{ 
		private List<Component> _children = new List<Component>(); 
		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);
			foreach (Component component in _children) 
			{ 
				component.Display(depth + 2); 
			} 
		} 
	} 

	class Leaf : Component
	{
		public Leaf(string name) : base(name)
		{ }
		public override void Add(Component c)
		{
			Console.WriteLine(name +" Ekleme yapılamaz");
		}
		public override void Remove(Component c)
		{
			Console.WriteLine(name +" Silinemez");
		}
		public override void Display(int depth)
		{
			Console.WriteLine(new String('-', depth) + name);
		}
	}

	class MainApp
	{
		static void Main()
		{
			Composite root = new Composite("kök");
			root.Add(new Leaf("Kırılım 1"));
			root.Add(new Leaf("Kırılım 2")); 

			Composite comp = new Composite("kök 2");
			comp.Add(new Leaf("kırılım 1"));
			comp.Add(new Leaf("kırılım 2"));

			root.Add(comp);
			root.Add(new Leaf("kırılım 3"));

			Leaf leaf = new Leaf("aykırı kırılım");
			leaf.Add (comp);
			root.Add(leaf);

			root.Display(1);

			Console.ReadKey();
		}
	}
}

Çıktı
—————————————
aykırı kırılım Ekleme yapılamaz
-kök
—Kırılım 1
—Kırılım 2
—kök 2
—–kırılım 1
—–kırılım 2
—kırılım 3
—aykırı kırılım

Yorum Bırakın