CodeBlanks Logo Icon CodeBlanks

Özet - Tasarım desenleri

Singleton, Factory ve Strategy'i birleştirerek bir ödeme sistemi yazarsın.

Özet - Tasarım desenleri

Bu grupta beş temel deseni gördük: Singleton tek örnek, Factory nesne oluşturma, Strategy algoritma değişimi, Observer bildirim ve Decorator sarmalama. Her biri farklı bir sorunu çözer.

Hangi deseni seçeceğin soruna bağlıdır: tek kayıt noktası için Singleton, somut sınıf gizleme için Factory, değişen algoritma için Strategy, durum bildirimi için Observer ve dinamik davranış ekleme için Decorator. Şimdi iki deseni küçük görevlerle tekrar edeceğiz.

Desen seçimi

Desenler bir amaç değil bir araçtır. Sorunu çözmeyen bir deseni zorlama; basit kod bazen en iyisidir. Bir desen yalnızca gerçek bir esneklik gerektiğinde eklenir.

Örnek: tek bir ödeme yöntemi varsa Strategy gereksizdir; birden fazla yöntem ve çalışma anında değişim varsa Strategy anlamlıdır. Aynı şekilde tek bir somut sınıf varsa Factory fazla külfetlidir. Desenler, değişen kısmı ayırmak için kullanılır; sabit kalan kısımda karmaşıklaşmaya yol açmamalıdır.

Uygulama Singleton sayaç

Bir Counter Singleton sınıfı yaz: private static Counter instance, private kurucu, public static Counter getInstance() (ilk çağrıda örnek oluştursun), private int count alanı, void increment() ve int get() yöntemleri. main içinde getInstance ile al, increment iki kez çağır ve get sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Counter Singleton sınıfını tanımla
// increment ve get ekle
// main içinde sayıyı yazdır

Örnek çözüm

Main.java
class Counter {
    private static Counter instance;
    private int count;
    private Counter() { }
    public static Counter getInstance() {
        if (instance == null) instance = new Counter();
        return instance;
    }
    public void increment() { count++; }
    public int get() { return count; }
}

public class CounterDemo {
    public static void main(String[] args) {
        Counter c = Counter.getInstance();
        c.increment();
        c.increment();
        System.out.println(c.get());
    }
}

Beklenen çıktı

2

Uygulama Şeker decorator'ı ile kahve

Bir Coffee arayüzü tanımla: int cost(). SimpleCoffee sınıfı cost 10 döndürsün. SugarDecorator sınıfı Coffee arayüzünü uygulasın; kurucu Coffee inner alsın, cost inner.cost() + 2 döndürsün. main içinde new SugarDecorator(new SimpleCoffee()) ile sarmala ve cost() sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Coffee arayüzünü ve SimpleCoffee sınıfını tanımla
// SugarDecorator ile sarmala
// main içinde maliyeti yazdır

Örnek çözüm

Main.java
interface Coffee { int cost(); }

class SimpleCoffee implements Coffee {
    public int cost() { return 10; }
}

class SugarDecorator implements Coffee {
    private Coffee inner;
    public SugarDecorator(Coffee inner) { this.inner = inner; }
    public int cost() { return inner.cost() + 2; }
}

public class SugarDemo {
    public static void main(String[] args) {
        Coffee c = new SugarDecorator(new SimpleCoffee());
        System.out.println(c.cost());
    }
}

Beklenen çıktı

12

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi desen bir sınıftan yalnızca tek örnek olmasını sağlar?

  • Factory
  • Singleton Doğru cevap
  • Observer
  • Strategy

Açıklama: Singleton, tek örnek garantisini verir.

2 Factory create çağrısını tamamla

Soru
Shape s = ShapeFactory.create(____);
Cevap
Shape s = ShapeFactory.create("circle");

Açıklama: Tür parametresi dizgidir.

İleri seviye bölümündeki tüm dersler