Acest curs explorează Adapter, Decorator, Proxy și Chain of Responsibility, modele utilizate pentru flexibilitate și extinderea comportamentului obiectelor.
Pattern-ul Adapter permite obiectelor cu interfețe incompatibile să colaboreze printr-un adaptor.
class VechiSistem:
def operatiune_veche(self):
return "Funcționalitate veche"
class Adapter:
def __init__(self, vechi_sistem):
self.vechi_sistem = vechi_sistem
def operatiune_noua(self):
return self.vechi_sistem.operatiune_veche()
sistem = VechiSistem()
adapter = Adapter(sistem)
print(adapter.operatiune_noua()) # Output: Funcționalitate veche
Decorator permite adăugarea dinamică de comportament obiectelor fără a modifica codul sursă.
def decorator_simplu(functie):
def wrapper():
print("Înainte de apel")
functie()
print("După apel")
return wrapper
@decorator_simplu
def salut():
print("Salutare!")
salut()
Pattern-ul Proxy oferă un substitut pentru controlul accesului la un obiect real.
class ServiciuReal:
def operatiune(self):
return "Date din serviciul real"
class Proxy:
def __init__(self):
self.serviciu_real = None
def operatiune(self):
if self.serviciu_real is None:
self.serviciu_real = ServiciuReal()
return self.serviciu_real.operatiune()
proxy = Proxy()
print(proxy.operatiune()) # Output: Date din serviciul real
Chain of Responsibility permite trimiterea unei cereri printr-un lanț de obiecte care decid dacă o procesează sau o pasează mai departe.
class Handler:
def __init__(self, succesor=None):
self.succesor = succesor
def gestioneaza(self, cerere):
if self.succesor:
return self.succesor.gestioneaza(cerere)
return "Niciun handler disponibil."
class HandlerConcret(Handler):
def gestioneaza(self, cerere):
if cerere == "cerere1":
return "HandlerConcret a procesat cererea."
return super().gestioneaza(cerere)
handler = HandlerConcret(Handler())
print(handler.gestioneaza("cerere1")) # Output: HandlerConcret a procesat cererea.