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.
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.
İ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..
Örnek Kod
Buradaki kod içerisinde
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.