Middle
Decorator nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Dekoratör, nesneye dinamik olarak yeni davranışlar eklemeyi sağlayan yapısal bir tasarım desenidir ve onları özel dekoratör nesneleriyle sarmalayarak gerçekleştirilir.
Temel ilkeler:
- Kapsülleme yerine kalıtım. Dekoratör, nesnenin sınıfını değiştirmeden veya kalıtım kullanmadan işlevselliği genişletir.
- Esneklik. Nesnenin sorumluluklarını çalışma zamanında eklemeye veya kaldırmaya izin verir.
- Uyumluluk. Dekoratörler ve sarmalanan nesneler ortak bir arayüze sahiptir, bu da onları birbirinin yerine kullanmayı sağlar.
Yapı:
- Bileşen (Component): Dinamik olarak yeni sorumluluklar eklenebilen nesneler için arayüz.
- Somut bileşen (ConcreteComponent): Bileşenin uygulaması.
- Dekoratör (Decorator): Bileşeni genişleten ve Bileşene referans içeren soyut sınıf veya arayüz.
- Somut dekoratörler (Concrete Decorators): Belirli davranışlar ekleyen dekoratör uygulamaları.
Örnek (Python):
// Bileşen arayüzü
class Coffee:
def get_cost(self):
pass
def get_description(self):
pass
// Somut bileşen
class SimpleCoffee(Coffee):
def get_cost(self):
return 1.0
def get_description(self):
return "Basit Kahve"
// Temel dekoratör
class CoffeeDecorator(Coffee):
def __init__(self, decorated_coffee):
self._decorated_coffee = decorated_coffee
def get_cost(self):
return self._decorated_coffee.get_cost()
def get_description(self):
return self._decorated_coffee.get_description()
// Somut dekoratör (Süt)
class MilkDecorator(CoffeeDecorator):
def get_cost(self):
return self._decorated_coffee.get_cost() + 0.5
def get_description(self):
return self._decorated_coffee.get_description() + ", Süt"
// Kullanım
coffee = SimpleCoffee()
print(f"{coffee.get_description()}: ${coffee.get_cost()}") # Basit Kahve: $1.0
coffee_with_milk = MilkDecorator(coffee)
print(f"{coffee_with_milk.get_description()}: ${coffee_with_milk.get_cost()}") # Basit Kahve, Süt: $1.5
Avantajlar:
- Nesnelerin işlevselliğini kalıtımdan daha esnek bir şekilde genişletir.
- Kalıtımla ilişkili alt sınıfların çoğalmasını önler.
- Bir nesneye birden fazla "katman" davranış eklemeye olanak tanır.
Dezavantajlar:
- Çok sayıda küçük nesne nedeniyle kod karmaşıklaşabilir.
- Sarma sırası önemli olabilir.
QA / Otomasyon uygulaması:
- Mevcut metodlara günlük kaydı eklemek, kaynak kodunu değiştirmeden.
- Belirli çağrılar için istisna yönetimi uygulamak.
- Zamanlama veya performans metrikleri eklemek.
- Test otomasyon kütüphanelerinde (örneğin, Page Object deseninde, elementlerle etkileşim sırasında doğrulama veya günlük kaydı eklemek için).