Middle
Mi az a dekorátor a programozás kontextusában?
sobes.tech MI
Válasz az MI-től
A dekorátor egy tervezési minta, amely lehetővé teszi, hogy dinamikusan új viselkedést adjunk meglévő objektumokhoz, speciális "burkoló objektumok" segítségével anélkül, hogy megváltoztatnánk azok szerkezetét.
Fő elvek:
- Dinamikus viselkedés hozzáadása: A funkcionalitás futás közben adódik hozzá, nem statikusan.
- Átláthatóság a kliens számára: A klienskód úgy lép kapcsolatba a dekorátorral, mintha az az eredeti objektum lenne.
- Rugalmasság: Különböző dekorátorok kombinálásával elérhető a kívánt viselkedés.
Python példa:
def my_decorator(func):
def wrapper():
print("A függvény hívása előtt")
func()
print("A függvény hívása után")
return wrapper
@my_decorator
def say_hello():
print("Szia!")
# Dekorátorral hívott függvény
say_hello()
Ebben a példában az @my_decorator szintaktikai cukor, ami megegyezik azzal, mint say_hello = my_decorator(say_hello).
JavaScript példa:
function logCall(target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Metódus ${key} hívása argumentumokkal: ${args}`);
const result = originalMethod.apply(this, args);
console.log(`A ${key} metódus eredménye: ${result}`);
return result;
};
return descriptor;
}
class Example {
@logCall
add(a, b) {
return a + b;
}
}
const instance = new Example();
instance.add(2, 3);
Itt a @logCall a add metódushoz ad hozzá naplózást.
QA Automatizálásban való alkalmazás:
- Naplózás: Napló hozzáadása tesztlépésekhez vagy elemekkel való interakciókhoz.
- Kivételkezelés: Függvényhívások köré csomagolás, hogy kezelje a speciális kivételeket.
- Állapotkezelés: Az objektum állapotának módosítása a metódusok hívása előtt vagy után (pl. kontextusok váltása).
- Hitelesítés/jogosultság: Jogosultságok ellenőrzése, mielőtt egy adott műveletet végrehajtanánk.