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.