Sobes.tech
Middle

Czym jest dekorator w kontekście programowania?

sobes.tech AI

Odpowiedź od AI

Dekorator to wzorzec projektowy, który umożliwia dynamiczne dodawanie nowego zachowania do istniejących obiektów, opakowując je w specjalne "obiekty-opakowania" bez zmiany ich struktury.

Kluczowe zasady:

  • Dynamczne dodawanie zachowania: Funkcjonalność jest dodawana w czasie działania, a nie statycznie.
  • Przejrzystość dla klienta: Kod klienta wchodzi w interakcję z dekoratorem tak, jakby był to oryginalny obiekt.
  • Elastyczność: Pozwala na łączenie różnych dekoratorów w celu osiągnięcia pożądanego zachowania.

Przykład w Pythonie:

def my_decorator(func):
    def wrapper():
        print("Przed wywołaniem funkcji")
        func()
        print("Po wywołaniu funkcji")
    return wrapper

@my_decorator
def say_hello():
    print("Cześć!")

# Wywołanie funkcji z zastosowanym dekoratorem
say_hello()

W tym przykładzie, @my_decorator jest cukrem składniowym równoważnym say_hello = my_decorator(say_hello).

Przykład w JavaScript:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Wywołanie metody ${key} z argumentami: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`Metoda ${key} zwróciła: ${result}`);
        return result;
    };
    return descriptor;
}

class Example {
    @logCall
    add(a, b) {
        return a + b;
    }
}

const instance = new Example();
instance.add(2, 3);

Tutaj, @logCall jest używany do dodania logowania do metody add klasy Example.

Zastosowanie w QA Automation:

  • Logowanie: Dodanie logowania do kroków testów lub interakcji z elementami.
  • Obsługa wyjątków: Opakowywanie wywołań funkcji w celu obsługi specyficznych wyjątków.
  • Zarządzanie stanem: Zmiana stanu obiektu przed lub po wywołaniu jego metod (np. przełączanie kontekstów).
  • Uwierzytelnianie/autoryzacja: Sprawdzanie uprawnień przed wykonaniem określonego działania.