Middle
Kas yra dekoratorius programavimo kontekste?
sobes.tech AI
Atsakymas iš AI
Dekoratorius — tai projektavimo šablonas, leidžiantis dinamiškai pridėti naują elgesį esamiems objektams, juos apvyniojant specialiais "apvyniojimo objektais" be jų struktūros keitimo:
Pagrindiniai principai:
- Dinamiškas elgesio pridėjimas: Funkcionalumas pridedamas vykdymo metu, o ne statiniu būdu.
- Skaitmeninis skaidrumas klientui: Kliento kodas sąveikauja su dekoratoriumi kaip su originaliu objektu.
- Lankstumas: Leidžia derinti įvairius dekoratorius norimam elgesiui pasiekti.
Python pavyzdys:
def my_decorator(func):
def wrapper():
print("Prieš funkcijos kvietimą")
func()
print("Po funkcijos kvietimo")
return wrapper
@my_decorator
def say_hello():
print("Labas!")
# Funkcijos kvietimas su dekoratoriumi
say_hello()
JavaScript pavyzdys:
function logCall(target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Metodo ${key} iškvietimas su argumentais: ${args}`);
const result = originalMethod.apply(this, args);
console.log(`Metodo ${key} grąžino: ${result}`);
return result;
};
return descriptor;
}
class Example {
@logCall
add(a, b) {
return a + b;
}
}
const instance = new Example();
instance.add(2, 3);
Čia @logCall naudojamas pridėti žurnalavimą prie add metodo.
QA automatizavimo taikymas:
- Žurnalavimas: Pridėti žurnalavimą prie testų žingsnių ar elementų sąveikų.
- Išimčių apdorojimas: Apvynioti funkcijų iškvietimus specialių išimčių apdorojimui.
- Būsenos valdymas: Keisti objekto būseną prieš arba po metodo iškvietimo (pvz., kontekstų perjungimas).
- Autentifikacija/leidimų patikrinimas: Patikrinti prieigos teises prieš atliekant tam tikrą veiksmą.