Middle
Decorator (Dekoratör) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Dekoratör, nesneye dinamik olarak yeni işlevsellikler eklemeye olanak tanıyan yapısal tasarım desenidir ve nesnenin yapısını değiştirmez. Nesneyi sarmalar, aynı arayüzü sağlar ve bu sayede davranışını ekler veya değiştirir.
Ana öğeler:
- Bileşen (Component): Sarılan nesneler ve dekoratörler için ortak işlevselliği tanımlayan arayüz veya soyut sınıf.
- Somut Bileşen (Concrete Component): İşlevsellik eklenen temel nesne olan bileşenin uygulaması.
- Dekoratör (Decorator): Bileşen arayüzünü uygulayan ve bir bileşen nesnesine referans içeren soyut sınıf.
- Somut Dekoratör (Concrete Decorator): Sarılan nesne metodunu çağırmadan önce veya sonra belirli işlevsellik ekleyen dekoratör uygulaması.
Python örneği:
# Bileşen
class Coffee:
def get_cost(self):
return 5 # Temel kahve maliyeti
def get_description(self):
return "Basit Kahve"
# Somut Bileşen
class SimpleCoffee(Coffee):
pass
# Dekoratör
class CoffeeDecorator(Coffee):
def __init__(self, coffee):
self._coffee = coffee
def get_cost(self):
return self._coffee.get_cost()
def get_description(self):
return self._coffee.get_description()
# Somut Dekoratör
class MilkDecorator(CoffeeDecorator):
def get_cost(self):
return self._coffee.get_cost() + 2 # Sütün maliyetini ekle
def get_description(self):
return self._coffee.get_description() + ", Süt"
# Kullanım
# simple_coffee = SimpleCoffee()
# print(f"Maliyet: {simple_coffee.get_cost()}, Açıklama: {simple_coffee.get_description()}")
# sütlü_kahve = MilkDecorator(simple_coffee)
# print(f"Maliyet: {sütlü_kahve.get_cost()}, Açıklama: {sütlü_kahve.get_description()}")
Avantajlar:
- Esneklik: İşlevsellik çalışma zamanında eklenebilir.
- Alt sınıflardan kaçınma: Her davranış kombinasyonu için çok sayıda alt sınıf oluşturmak önlenir.
- Sorumlulukların ayrılması: Her davranış eklemesi ayrı bir sınıfta yapılır.
Dezavantajlar:
- Sınıf sayısını artırabilir.
- Hata ayıklama, sarmalayıcıların zinciri nedeniyle daha karmaşık hale gelebilir.