19 Eyl 2015

Decorator Pattern

Author: strongsoul | Filed under: Teknik

Decorator Tasarım kalıbı bir nesneye yeni işlevselliklerin eklenmesi yada var olanların çıkarılması amacıyla kullanılır, nesnenin kendisinden türeyen alt sınıflar ile genişletilmesi yerine farklı bir yaklaşım olarak düşünülebilir.

using System;

namespace decorator
{
	class MainApp
	{
		static void Main()
		{
			ConcreteComponent c = new ConcreteComponent();
			ConcreteDecoratorA d1 = new ConcreteDecoratorA();
			ConcreteDecoratorB d2 = new ConcreteDecoratorB();

			d1.SetComponent(c);
			d2.SetComponent(d1);
			d2.Operation();

			// Wait for user
			Console.ReadKey();
		}
	}

	abstract class Component
	{
		public abstract void Operation();
	}


	class ConcreteComponent : Component
	{
		public override void Operation()
		{
			Console.WriteLine("ConcreteComponent.Operation()");
		}
	}

	abstract class Decorator : Component
	{
		protected Component component;
		public void SetComponent(Component component)
		{
			this.component = component;
		}
			
		public override void Operation()
		{
			if (component != null)
			{
				component.Operation();
			}
		}
	}


	class ConcreteDecoratorA : Decorator
	{
		public override void Operation()
		{
			base.Operation();
			Console.WriteLine("A.Operation()");
		}
	}



	class ConcreteDecoratorB : Decorator
	{
		public override void Operation()
		{
			base.Operation();
			AddedBehavior();
			Console.WriteLine("B.Operation()");
		}


		void AddedBehavior()
		{
		}

	}

}

çıktısı :
———————————
ConcreteComponent.Operation()
A.Operation()
B.Operation()

Yorum Bırakın