Sobes.tech
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).