Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Flyweight Tasarım Deseni - Flyweight Design Pattern | sql identity insert>>

Proxy Tasarım Deseni - Proxy Design Pattern

Yazar harunozer 15 December 2012

Proxy Tasarım Deseni - Proxy Design Pattern Proxy tasarım deseni, structural grubuna ait oluşturulması karmaşık veya oluşturulması zaman alan işlemlerin kontrolünü sağlar. Dofactory.com a göre kullanım sıklığı %80 civarındadır ve yapı bakımından basittir.

Ve geldik GOF tasarım desenlerinin sonuncusuna…

Proxy tasarım deseni çalışma maliyeti yüksek işlemlerin olduğu yapılarda, web servisi kullanılan yapılarda, remoting uygulamalarında, operasyonun gerçekleştirilmesinden önce hazırlık yapılması veya ön işlem yapılması durumlarında kullanılır. Uygulanışı basit bir tasarım desenidir. Uml diyagramı aşağıdadır.

proxy design pattern uml

Uml diyagramındaki Subject yapısı interface veya abstract sınıf olarak tasarlanır ve gerçekleştirilecek operasyonların tanımını belirtir. RealSubject ve Proxy ise gerçek sınıflardır. RealSubject sınıfı operasyonu gerçekleştirecek gerçek kodları barındırır. Proxy sınıfı ise RealSubject sınıfındaki operasyonları çalıştırır. Yani burada proxy nesnesi client ve operasyonu gerçekleştirecek metotların arasında bulunan bir yapı görevi görür.

Örnek uygulamamızın senaryosu resim gösterimi üzerine olsun. Gerçekte gösterilecek büyük boyutta resimlerin olduğunu ve kullanıcıya resmi gösterirken resimler yüklenene kadar ön izleme resmini gösteriyor olalım. Tabi ki kodlarımızın uzamaması için sadece konsol ekranına yazı yazdıracağız. Örnek uygulamanın sınıf diyagramı aşağıdadır.

proxy design pattern class diagram

Uygulamamızın açıklaması ve kodları aşağıdadır.


//Subject
interface IImageGenerator
{
    void ShowImage();
}

//RealSubject
class ImageGenerator : IImageGenerator
{
    public void ShowImage()
    {
        Console.WriteLine("gerçek resmi gösteriliyor.");
    }
}
//Proxy
class ImageGeneratorProxy : IImageGenerator
{
    //proxy sınıfı Subject i uygular ve içinde subject referansı barındırır.
    private ImageGenerator _generator;
    private Timer t;
    private bool LoadRealObject = false;
    private void ShowRealImage(object o)
    {
        _generator = new ImageGenerator();
        _generator.ShowImage();
        LoadRealObject = true;
    }
    public void ShowImage()
    {
        if (_generator == null)
        {
            //burada başka bir threadda asıl nesnenin yüklenmesinin başlatıldığını düşünebiliriz.
            t = new System.Threading.Timer(new TimerCallback(ShowRealImage), this, 2000, 0);
        }
        if (!LoadRealObject) //gerçek nesne yüklenmesi tamamlanmamış ise önizleme resmi gösterilsin.
            Console.WriteLine("önizleme resmi gösteriliyor.");
    }
}
class Program
{
    static void Main(string[] args)
    {
        ImageGeneratorProxy proxy1 = new ImageGeneratorProxy();
           
        proxy1.ShowImage();
        Console.ReadKey();
    }
}
 
Örnek uygulamayı aşağıdaki linkten indirebilirsiniz.

ProxySample.rar

Tam Sayfa
Tags tasarım desenleri,
Kategoriler c#.net, Tasarım Desenleri
İşlemler
Bu Makale 31  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri