Middle
Dekorator (Decorator) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Dekorator, obyektə dinamik olaraq yeni funksionallıq əlavə etməyə imkan verən struktur dizayn şablonudur və onun quruluşunu dəyişmir. O, obyektə sarılır, eyni interfeysi təmin edir və davranışını əlavə edir və ya dəyişdirir.
Əsas elementlər:
- Komponent (Component): Sarılan obyektlər və dekoratorlar üçün ümumi funksionallığı təyin edən interfeys və ya abstrakt sinif.
- Konkret komponent (Concrete Component): Komponentin tətbiqi, əsas obyekt və ona funksionallıq əlavə edilir.
- Dekorator (Decorator): Interfeysi həyata keçirən və komponent obyektinə istinad edən abstrakt sinif.
- Konkret dekorator (Concrete Decorator): Dekoratorun tətbiqi, sarılan obyektin metodunu çağırmadan əvvəl və ya sonra xüsusi funksionallıq əlavə edir.
Python nümunəsi:
# Komponent
class Coffee:
def get_cost(self):
return 5 # Əsas qiymət
def get_description(self):
return "Sadə Qəhvə"
# Konkret komponent
class SimpleCoffee(Coffee):
pass
# Dekorator
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()
# Konkret dekorator
class MilkDecorator(CoffeeDecorator):
def get_cost(self):
return self._coffee.get_cost() + 2 # Südün qiymətini əlavə et
def get_description(self):
return self._coffee.get_description() + ", Süd"
# İstifadə
# simple_coffee = SimpleCoffee()
# print(f"Qiymət: {simple_coffee.get_cost()}, Təsvir: {simple_coffee.get_description()}")
# süd ilə qəhvə = MilkDecorator(simple_coffee)
# print(f"Qiymət: {süd ilə qəhvə.get_cost()}, Təsvir: {süd ilə qəhvə.get_description()}")
Üstünlüklər:
- Esneklik: Funksionallıq işləmə zamanı əlavə edilə bilər.
- Alt siniflərdən qaçınma: Hər bir davranışın birləşməsi üçün çox sayda alt sinif yaratmaqdan qaçınır.
- Məsuliyyətlərin bölünməsi: Hər bir davranış əlavə, ayrıca sinifdə həyata keçirilir.
Çatışmazlıqlar:
- Siniflərin sayını artıra bilər.
- Debug etmək çətinləşə bilər, çünki sarma zənciri mürəkkəbləşir.