Özet - Tasarım desenleri
- Java kursu
- İleri seviye
- Ders 42/82
- 5 dk
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
// Counter Singleton sınıfını tanımla
// increment ve get ekle
// main içinde sayıyı yazdırÖrnek çözüm
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
// Coffee arayüzünü ve SimpleCoffee sınıfını tanımla
// SugarDecorator ile sarmala
// main içinde maliyeti yazdırÖrnek çözüm
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
Shape s = ShapeFactory.create(____);
Shape s = ShapeFactory.create("circle");
Açıklama: Tür parametresi dizgidir.