Kod Sörfü

Dalgalan her satırda, keşfet sonsuz kod okyanusunu.

Yapısal Kalıplar (Structural Patterns)

Yapısal Kalıplar (Structural Patterns)

Yapısal tasarım kalıpları, büyük yapıları daha basit ve daha etkili şekilde yönetmek için sınıflar ve nesneler arasındaki ilişkileri düzenler. Adapter, Composite, Proxy, Flyweight ve Bridge gibi kalıplar, Java’daki yapısal sorunların çözümünde önemli rol oynar. Adapter kalıbı, örneğin, birbirleriyle uyumsuz olan arayüzlerin birlikte çalışabilmesini sağlar. Bu, mevcut sistemlere yeni sınıflar veya kütüphaneler entegre ederken sıkça başvurulan bir yöntemdir.

Adapter

Tanım: Bir sınıfın arayüzünü, başka bir sınıfın beklediği arayüze dönüştürür. Böylece, uyumsuz arayüzlere sahip sınıflar birlikte çalışabilir hale gelir. Örnek: Eski bir sistemde kullanılan bir veri işleme sınıfı, yeni sistemdeki bir arayüzle uyumsuzdur. Adapter kalıbı, eski sınıfın metodlarını yeni sistemde beklenen formata uygun hale getirir.

Proxy

Tanım: Bir nesnenin yerine geçerek, ona erişimi kontrol eder veya onun işlevselliğini genişletir. Örnek: Bir resim yükleme işlemi, yüksek maliyetli olduğundan, Proxy kalıbı kullanılarak sadece gerektiğinde gerçekleştirilir. Resmin gerçek yüklemesi, Proxy üzerinden erişim sağlandığında başlatılır, böylece kaynak kullanımı optimize edilir.

Adapter patern

public interface Target {
    void request();
}

public class Adaptee {
    public void specificRequest() {
        System.out.println("Specific request.");
    }
}

public class Adapter implements Target {
    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

// Kullanımı
public class Main {
    public static void main(String[] args) {
        Target target = new Adapter();
        target.request();
    }
}

Proxy Patern

public interface Image {
    void display();
}

public class RealImage implements Image {
    private String fileName;

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

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

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

public class ProxyImage implements Image {
    private RealImage realImage;
    private String fileName;

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

    @Override
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }
}

// Kullanımı
public class Main {
    public static void main(String[] args) {
        Image image = new ProxyImage("test_image.jpg");
        // Image will be loaded from disk
        image.display(); 
        // Image will not be loaded from disk
        image.display(); 
    }
}
Mehmet Alp avatarı

Bir yanıt yazın

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

Mehmet Alp Albayraktaroğlu

LinkedIn’de benimle iletişime geçmekten çekinmeyin veya bana bir e-posta gönderin—teknolojiyle ilgili her şeyi konuşmaktan mutluluk duyarım! 🚀👩‍💻