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();
}
}
Bir yanıt yazın