Sobes.tech
Middle

Singleton dışında hangi tasarım desenlerini kullandınız?

sobes.tech yapay zeka

AI'dan gelen yanıt

  • Fabrika Yöntemi. Nesneleri açıkça belirli sınıf türünü belirtmeden oluşturmak için kullanılır. Nesne oluşturma mantığının alt sınıflara bağlı olduğu durumlarda uygundur.
  • Soyut Fabrika. Birbirine bağlı veya bağımlı nesil aileleri oluşturmak için kullanılır ve bunun için bir arayüz sağlar, ancak belirli sınıfları belirtmez.
  • Builder. Karmaşık nesneleri adım adım oluşturmak için kullanılır, adımların sırası ve kombinasyonu değişebilir. "Teleskopik yapıcı" sorununu önler.
  • Gözlemci (Observer). Nesneler arasında "birden çoğa" bağımlılıkları oluşturmak için uygulanır; bir nesnenin durumu değiştiğinde, tüm bağımlı nesneler otomatik olarak bilgilendirilir.
  • Strateji (Strategy). Algoritmalar ailesini tanımlamak, her birini kapsüllemek ve bunların birbirinin yerine kullanılabilirliğini sağlamak için kullanılır. Çalışma zamanında algoritma seçimine imkan tanır.
  • Dekoratör (Decorator). Nesnelerin yapısını değiştirmeden yeni sorumluluklar eklemek için kullanılır.
  • Proxy. Erişimi kontrol etmek gereken durumlarda kullanılır, örneğin, tembel yükleme veya uzak erişim için.
  • Şablon Yöntemi (Template Method). Algoritmanın iskeletini üst sınıfta tanımlamak ve alt sınıfların belirli adımları yeniden tanımlamasına izin vermek için kullanılır.
  • Adaptör (Adapter). Bir sınıfın arayüzünü, müşterilerin beklediği arayüze dönüştürmek için kullanılır. Uyumsuz arayüzlere sahip sınıfların birlikte çalışmasını sağlar.
  • Komut (Command). Bir isteği nesne biçiminde kapsüller, böylece farklı isteklerle istemcileri parametreleyebilir, istekleri sıraya koyabilir veya işlem günlükleri tutabilir ve işlemleri geri almayı destekleyebilir.

Fabrika Yöntemi örneği:

// Ürün arayüzü
interface Product {
    void doSomething();
}

// Somut ürünler
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Product A'da bir şey yapar");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Product B'da bir şey yapar");
    }
}

// Fabrika arayüzü
abstract class Creator {
    public abstract Product factoryMethod();

    public void someOperation() {
        Product product = factoryMethod();
        product.doSomething();
    }
}

// Somut fabrikalar
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}