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