Proxy Pattern Nedir ve Nasıl Kullanılır?

Proxy Pattern, yazılım tasarımında oldukça yaygın kullanılan bir yapısal desendir. Bu desen, bir nesneye erişimi kontrol etmek veya ek fonksiyonlar eklemek için kullanılır. Ayrıca, Proxy Tasarım Deseni, genellikle gerçek nesneye erişimi kontrol etmek, önbellekleme yapmak, yetkilendirme sağlamak veya maliyetli işlemleri geciktirmek için de kullanılmaktadır. Şimdi bu tasarım desenini ve nasıl çalıştığını detaylı bir örnekle inceleyelim.

Proxy Pattern’in Temel Yapısı

Bu tasarım deseni üç ana bileşenden oluşur:

  1. Subject (Konu): Proxy ve Gerçek Nesnenin (RealSubject) ortak arayüzünü tanımlar.
  2. RealSubject (Gerçek Nesne): Asıl işlevi gerçekleştiren sınıftır.
  3. Proxy (Vekil): Gerçek nesneye erişimi kontrol eder veya ek işlevsellik sağlar.

Proxy Pattern Kullanım Amacı

Bu deseni, aşağıdaki durumlarda kullanabiliriz:

  • Gecikmeli Başlatma (Lazy Initialization): Gerçek nesneye ihtiyaç duyulana kadar oluşturulmasını geciktirir.
  • Erişim Kontrolü: Belirli kullanıcıların belirli işlemleri gerçekleştirmesini engeller.
  • Önbellekleme: Sonuçları önbelleğe alarak performansı artırır.
  • Giriş/Çıkış Yönetimi: Ağ bağlantısı gibi kaynaklara erişimi yönetir.

Proxy Pattern Kod Örneği

Aşağıda, bir dosya okuma işlemini kontrol eden basit bir Proxy Tasarım deseni örneği yer almaktadır. Bu örnekte, FileReader sınıfı gerçek nesne, FileReaderProxy sınıfı ise vekil nesne olarak görev yapmaktadır.

// Subject Arayüzü
public interface Reader {
    void read();
}

// Gerçek Nesne
public class FileReader implements Reader {
    private String fileName;

    public FileReader(String fileName) {
        this.fileName = fileName;
        loadFromDisk();
    }

    private void loadFromDisk() {
        System.out.println("Loading " + fileName);
    }

    @Override
    public void read() {
        System.out.println("Reading " + fileName);
    }
}

// Proxy Nesne
public class FileReaderProxy implements Reader {
    private FileReader fileReader;
    private String fileName;

    public FileReaderProxy(String fileName) {
        this.fileName = fileName;
    }

    @Override
    public void read() {
        if (fileReader == null) {
            fileReader = new FileReader(fileName);
        }
        fileReader.read();
    }
}

// Kullanım
public class ProxyPatternDemo {
    public static void main(String[] args) {
        Reader reader = new FileReaderProxy("test.txt");
        
        // Dosya ilk kez okunduğunda, dosya yüklenir ve okunur
        reader.read();

        // Dosya tekrar okunduğunda, doğrudan okunur
        reader.read();
    }
}

Proxy Pattern – Kod Açıklaması

  1. Subject Arayüzü: Reader arayüzü, hem FileReader hem de FileReaderProxy tarafından uygulanır. Bu arayüz, okuma işlemini tanımlar.
  2. Gerçek Nesne: FileReader sınıfı, dosyanın yüklenmesi ve okunması işlemlerini gerçekleştiren sınıftır. Dosya adı ile başlatılır ve read yöntemi çağrıldığında dosyayı okur.
  3. Proxy Nesne: FileReaderProxy sınıfı, gerçek nesneye erişimi kontrol eder. İlk kez read yöntemi çağrıldığında gerçek nesneyi oluşturur ve ardından okuma işlemini gerçekleştirir.

Sonuç

Proxy Pattern, yazılım geliştirme sürecinde nesnelere erişimi kontrol etmenin etkili bir yoludur. Sistemdeki gereksiz kaynak tüketimi ve güvenlik açıklarını bu desen sayesinde önleyebiliriz. Proxy Pattern, gücü, esnekliği ve geniş kullanım alanı sayesinde yazılım mühendisleri için vazgeçilmez bir araçtır. Bu desen, çeşitli senaryolarda uygulanarak yazılım projelerinin daha etkin ve verimli olmasını sağlar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir