21 Eyl 2015

Proxy Pattern

Author: strongsoul | Filed under: Teknik

Proxy tasarım deseni oluşturulması karmaşık yada üretimi zaman alan işlemlerde kullanılan bir patterndir. Web servis kullanan yapılarda, remoting ve benzeri uygulamalarda uygulamanın işleme alınmasından önce ön yükleme yapılması durumlarında kullanılır.

Bir örnek ile pekiştirelim:

using System;
using System.Threading;

namespace Proxypattern
{
	class MainApp
	{
		static void Main()
		{

			Proxy proxy = new Proxy ();

			Thread proxyThread=new Thread(new ThreadStart(proxy.proxyThreadMethod));		
			proxyThread.Start ();

			Thread.Sleep (100);//devam eden islem blogu

			proxy.Request();

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

	abstract class Subject
	{
		public abstract void Request();
	}

	class TempSubject : Subject
	{
		public override void Request()
		{
			Console.WriteLine("Called TempSubject.Request()");
		}
	}

	class RealSubject : Subject
	{
		public override void Request()
		{
			Console.WriteLine("Called RealSubject.Request()");
		}
	}

	class Proxy : Subject
	{

		private Subject subject;

		public override void Request()
		{
			// lazy veri veri lazy 🙂
			if (!Proxy.proxyThreadLoading)
			{
				subject = new TempSubject();
			}
			else if (Proxy.proxyThreadLoading)
			{
				subject = new RealSubject();
			}

			subject.Request();
		}

		public static bool proxyThreadLoading = false;
		public void proxyThreadMethod()
		{
			proxyThreadLoading = true;
			//subject = new RealSubject();
			//subject.Request();
		}
	}
}

Çıktı :
————————————————–
Called RealSubject.Request()

Eğer Main method’daki  Thread.sleep komutunu kapatırsak alacağımız çıktı :

Called TempSubject.Request()

Her halükarda Realsubject nesnesini yüklemek istiyor isek proxyThreadMethod daki yükleme sonucunda nesneyi değiştiren satırları açmalıyız

Yorum Bırakın