Middle
Какво е декоратор в контекста на програмирането?
sobes.tech AI
Отговор от AI
Декораторът е шаблон за дизайн, който позволява динамично добавяне на ново поведение към съществуващи обекти, като ги обвива в специални "обекти-обвивки" без да променя тяхната структура.
Ключови принципи:
- Динамично добавяне на поведение: Функционалността се добавя по време на изпълнение, а не статично.
- Прозрачност за клиента: Клиентският код взаимодейства с декоратора, сякаш това е оригиналният обект.
- Гъвкавост: Позволява комбиниране на различни декоратори за постигане на желаното поведение.
Пример в Python:
def my_decorator(func):
def wrapper():
print("Преди извикването на функцията")
func()
print("След извикването на функцията")
return wrapper
@my_decorator
def say_hello():
print("Здравей!")
# Извикване на функция с приложен декоратор
say_hello()
В този пример, @my_decorator е синтактичен захар, който е еквивалентен на say_hello = my_decorator(say_hello).
JavaScript пример:
function logCall(target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Обаждане на метода ${key} с аргументи: ${args}`);
const result = originalMethod.apply(this, args);
console.log(`Методът ${key} върна: ${result}`);
return result;
};
return descriptor;
}
class Example {
@logCall
add(a, b) {
return a + b;
}
}
const instance = new Example();
instance.add(2, 3);
Тук, @logCall се използва за добавяне на логиране към метода add на класа Example.
Приложение в QA Automation:
- Логиране: Добавяне на логиране към тестови стъпки или взаимодействия с елементи.
- Обработка на изключения: Обвиване на извиквания на функции за обработка на специфични изключения.
- Управление на състоянието: Промяна на състоянието на обекта преди или след извикването на неговите методи (например, превключване на контексти).
- Аутентикация/авторизация: Проверка на правата за достъп преди изпълнение на определено действие.