Decorator
- Java kursu
- İleri seviye
- Ders 41/82
- 5 dk
Decorator desenini öğrenirsin.
Decorator deseni
Decorator, bir nesneyi sarmalayarak davranış ekler. Sarmalayan sınıf, sarmalanan nesne ile aynı arayüzü uygular; böylece istemci farkı görmez. Birden çok decorator iç içe geçebilir.
Örnek: Coffee arayüzü, SimpleCoffee temel nesne. MilkDecorator içine bir Coffee alır ve maliyetine süt fiyatını ekler. new MilkDecorator(new SimpleCoffee()) ile sarmalanmış bir kahve oluşur. Kalıtım yerine sarmalama tercih edilir; böylece davranış çalışma anında eklenebilir.
İç içe decorator'lar
Decorator'lar iç içe geçebilir: new SugarDecorator(new MilkDecorator(new SimpleCoffee())). Her katman kendi katkısını ekler; sonuç, tüm katmanların maliyetlerinin toplamıdır.
Bu, kalıtım hiyerarşisinin şişmesini önler. Her yeni özellik için yeni bir alt sınıf yerine bağımsız bir decorator yazılır. İstemci, istediği katmanları seçerek nesneyi özelleştirir. Bu esneklik özellikle IO akışlarında (örneğin BufferedReader) yaygındır.
Uygulama Kahveye süt decorator'ı ekle
Bir Coffee arayüzü tanımla: int cost(). SimpleCoffee sınıfı bu arayüzü uygulasın ve cost 10 döndürsün. MilkDecorator sınıfı Coffee arayüzünü uygulasın; kurucu bir Coffee inner alsın, cost inner.cost() + 3 döndürsün. main içinde new MilkDecorator(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
// MilkDecorator ile sarmala
// main içinde toplam maliyeti yazdırÖrnek çözüm
interface Coffee { int cost(); }
class SimpleCoffee implements Coffee {
public int cost() { return 10; }
}
class MilkDecorator implements Coffee {
private Coffee inner;
public MilkDecorator(Coffee inner) { this.inner = inner; }
public int cost() { return inner.cost() + 3; }
}
public class DecoratorDemo {
public static void main(String[] args) {
Coffee c = new MilkDecorator(new SimpleCoffee());
System.out.println(c.cost());
}
}Beklenen çıktı
13
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Decorator sarmaladığı nesne ile neyi paylaşır?
- Aynı arayüzü Doğru cevap
- Alanları
- Kurucuyu
- Statik durumu
Açıklama: Decorator, sarmaladığı nesne ile aynı arayüzü uygular.
2 Decorator kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
Coffee |
Ortak arayüz |
SimpleCoffee |
Temel nesne |
MilkDecorator |
Sarmalayıcı |
inner.cost() |
İç katmana delege |
3 Decorator kurucusunu tamamla
public MilkDecorator(____ inner) { this.inner = inner; }
public MilkDecorator(Coffee inner) { this.inner = inner; }
Açıklama: Decorator, sarmalanan türü alır.