TASARIM ÖRÜNTÜLERİ

Proxy

Structural Patterns bir örneği olan Proxy örüntüsü gerçek nesneye erişimin zor olduğu veya zaman aldığı durumlarda aynı interface implement eden Proxy’sine (Vekil’ine) erişerek işlemlerinizi proxy nesnesi üzerinde yapmanızı sağlar.

Onur Dayıbaşı
Design Patterns

--

Bilgi Notu: Diğer tüm Tasarım Örüntüleri yazıma bu linkten ulaşabilirsiniz.

Hangi Durumda

Gerçek nesneye erişimin zor olduğu durumlarda Örneğin ;

  • İlgili nesnenin/servisin uygulamanın ilk başından oluşturulması ve tüm uygulama boyunca ayakta tutulması sisteme büyük yük getirebilecek durumlar olabilir. Sistem olarak bu büyük servise sadece ihtiyacınız olduğunda bağlanmanız gerekiyorsa bu tip durumlarda Virtual Proxy (Lazy Initialization) kullanılabilir
  • İlgili nesne önemli kritik noktalara erişiyor ise işletim sistemi ve yetkili servisler, ve istemci sınıfın bu yetkileri yok ise arada bulunan vekil sınıfta bu tip kontroller yapılabilir Protection proxy
  • Kullanacağımız gerçek nesne aynı makinede çalışmıyor Local makineden Remote makineye bir network call yapılarak nesneye ulaşıyorsanız. Arada oluşan veya öncesinde oluşacak problemli durumları istemci nesneye yansıtmamak için Remote proxy kullanılabilir. ( Java RMI, Jini, JAX-RPC)
  • İstemcinin gerçek nesne üzerinden çağırdığı isteklerin log tarihçesi için Log Proxy olarak kullanabilirsiniz bu sırada aynı parametreler için aynı sonuçları dönüyorsa bunlar için Cache Proxy olarak kullanabilirsin
  • Yüklü gerçek nesne üzerinde nesnelerin referansını tutup, bu gerçek nesneleri cache’leyip. İlgili proxy kullanan istemci kalmadığı durumda gerçek nesneleri otomatik olarak kaldırılmasını sağlayan Smart Reference Proxy oluşturabilirsiniz.

Yapısı

Burda gerçek nesnemizin aynı servislerini verebilmek için Proxy ve Gerçek nesnemiz aynı arayüz’den Subject türemesi gerekiyor.

Proxy Class Diagram

İstemci arayüz üzerinden Proxy sınıf ile iletişime geçiyor. Proxy arka planda gerçek obje ile iletişime geçerek bir takım gerçek objede olan sorunları, problemleri istemciye yansıtmadan çözmeye çalışıyor.

Örneğin İstemci bir resim dosyası istiyor, resim yükleninceye kadar geçici bir resim yükleniyor resmi dönebilir vb..

Proxy Sequence Diagram

Örnek Kod

Buradaki kod içerisinde

code from https://sourcemaking.com/design_patterns/proxy/java/1

Proxy vs Facade vs Decorator

Geliştiricilerin kafasında şu şekilde sorular takılabilir ?

  • Aynı mantıkla çalışan Proxy ve Facade ne gibi farklılıkları olduğu ?Proxy bir tane gerçek nesneye veya servise erişirken oluşacak problemleri giderirken, Facade daha çok servisin olduğu ve bu servislerden farklı farklı metot çağırımlarını soyutlayarak istemcinin işlerini kolaylaştırdığını görebilirsiniz
  • Aynı yapıda olan Proxy ve Decorator arasında ne gibi farklılıklar olduğu ?
    Proxy gerçek nesnenin arayüzündeki servisler/metotlar ile sınırlıdır. Ama decorator mevcut nesneye yeni özellikler/fonksiyonlar kazandırmayı amaçlar.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--