Middle
Dekorator nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Dekorator — bu strukturlaşdırılmış dizayn nümunəsidir ki, bu da obyektlərə dinamik olaraq yeni davranışlar əlavə etməyə imkan verir və onları xüsusi dekorator obyektləri ilə örtür.
Əsas prinsiplər:
- İnteqrasiya yerinə irsiyyət. Dekorator obyektin funksionallığını onun sinfini dəyişmədən və irsiyyətdən istifadə etmədən genişləndirir.
- Esneklik. Obyektin məsuliyyətlərini işləmə zamanı əlavə etməyə və ya çıxarmağa imkan verir.
- Uyğunluq. Dekoratorlar və örtülən obyektlər ümumi interfeysə malikdir, bu da onları bir-birinin yerinə istifadə etməyə imkan verir.
Strukturu:
- Komponent (Component): Dinamik olaraq yeni məsuliyyətlər əlavə edilə bilən obyektlər üçün interfeys.
- Konkret komponent (ConcreteComponent): Komponentin tətbiqi.
- Dekorator (Decorator): Abstrakt sinif və ya interfeys, hansı ki, Komponenti genişləndirir və Komponent obyektinə istinad saxlayır.
- Konkret dekoratorlar (Concrete Decorators): Xüsusi davranışlar əlavə edən dekoratorların tətbiqi.
Nümunə (Python):
// Komponent interfeysi
class Coffee:
def get_cost(self):
pass
def get_description(self):
pass
// Konkret komponent
class SimpleCoffee(Coffee):
def get_cost(self):
return 1.0
def get_description(self):
return "Sadə Qəhvə"
// Əsas dekorator
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()
// Konkret dekorator (Süd)
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üd"
// İstifadə
coffee = SimpleCoffee()
print(f"{coffee.get_description()}: ${coffee.get_cost()}") # Sadə Qəhvə: $1.0
coffee_with_milk = MilkDecorator(coffee)
print(f"{coffee_with_milk.get_description()}: ${coffee_with_milk.get_cost()}") # Sadə Qəhvə, Süd: $1.5
Üstünlüklər:
- Ob'ektlərin funksionallığını irsiyyətə nisbətən daha elastik şəkildə genişləndirməyə imkan verir.
- İrsiyyətlə əlaqəli alt siniflərin çoxalmasının qarşısını alır.
- Bir ob'ektə bir neçə "qatman" davranış əlavə etməyə imkan verir.
Çatışmazlıqlar:
- Kiçik obyektlərin çoxluğu kodu mürəkkəbləşdirə bilər.
- Örtük sırasının önəmi ola bilər.
QA / Avtomatlaşdırma tətbiqləri:
- Mövcud metodlara qeydiyyat əlavə etmək, onların mənbə kodunu dəyişdirmədən.
- Xüsusi çağırışlar üçün istisna idarəetməsini həyata keçirmək.
- Zamanlama və ya performans metrikləri əlavə etmək.
- Test avtomatlaşdırma kitabxanalarında istifadə (məsələn, Page Object nümunəsində, elementlərlə qarşılıqlı əlaqədə yoxlamalar və ya qeydiyyat əlavə etmək üçün).