Java
Ö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.
Örnek çözümü göster
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());
}
}
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.
Örnek çözümü göster
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());
}
}
Kendini test et
-
Hangi desen bir sınıftan yalnızca tek örnek olmasını sağlar?
- Factory
- Singleton
- Observer
- Strategy
Cevabı göster
Singleton — Singleton, tek örnek garantisini verir.
-
Factory create çağrısını tamamla
Shape s = ShapeFactory.create(____);
Cevabı göster
Shape s = ShapeFactory.create("circle");
Sıradaki ders: JUnit temelleri