Middle
Ի՞նչ է դեկորատորը (Decorator) ծրագրավորման կոնտեքստում և ինչպես է այն օգտագործվում:
sobes.tech AI
Պատասխան AI-ից
Դեկորատորը՝ դա կառուցվածքային նախագծման օրինակ է, որը թույլ է տալիս դինամիկ կերպով ավելացնել նոր վարքագիծ կամ պարտականություններ օբյեկտներին՝ առանց նրանց կառուցվածքը փոփոխելու:
Հիմնական գաղափարներ՝
- Օբյեկտը պատում է, ընդլայնելով նրա գործառույթը:
- Պահպանում է պատվող օբյեկտի ինտերֆեյսը՝ ապահովելով փոխարինելիությունը:
- Արժեք է տալիս դասերի հիերարխիայի աճից՝ նոր վարքագծի համակցություններ ավելացնելիս:
Օգտագործում՝
- "Օն-դ-ֆլյու" գործառույթների ընդլայնում՝ երբ անհրաժեշտ է ավելացնել կամ փոխել օբյեկտի վարքագիծը ծրագրի գործարկման ժամանակ:
- Ներառման փոխարեն՝ երբ փոխարինում եք ժառանգությանը՝ օգտագործելով դեկորատորներ՝ ավելի ճկուն մոտեցում:
- Վարքագծերի համակցում՝ տարբեր դեկորատորներ կարող են կիրառվել նույն օբյեկտին տարբեր կարգով՝ ստեղծելով յուրահատուկ համակցություններ:
Python-ում օրինակ՝
# Հիմնական կոմպոնենտ
class Component:
def operation(self):
pass
# կոնկրետ կոմպոնենտ
class ConcreteComponent(Component):
def operation(self):
return "ConcreteComponent"
# Հիմնական դեկորատոր (պահպանում է հղում պատվող օբյեկտին)
class Decorator(Component):
def __init__(self, component):
self._component = component
def operation(self):
return self._component.operation()
# կոնկրետ դեկորատոր A
class ConcreteDecoratorA(Decorator):
def operation(self):
return f"ConcreteDecoratorA({self._component.operation()})"
# կոնկրետ դեկորատոր B
class ConcreteDecoratorB(Decorator):
def operation(self):
return f"ConcreteDecoratorB({self._component.operation()})"
# Օգտագործում
simple = ConcreteComponent()
print(simple.operation()) # ConcreteComponent
decorated_a = ConcreteDecoratorA(simple)
print(decorated_a.operation()) # ConcreteDecoratorA(ConcreteComponent)
decorated_b_a = ConcreteDecoratorB(decorated_a)
print(decorated_b_a.operation()) # ConcreteDecoratorB(ConcreteDecoratorA(ConcreteComponent))
Python-ում @ սինտաքսիկ շաքար՝
def my_decorator(func):
def wrapper():
print("Նախ ֆունկցիայի")
func()
print("Հետո ֆունկցիայի")
return wrapper
@my_decorator
def say_hello():
print("Բարև!")
say_hello()
# Արտածում՝
# Նախ ֆունկցիայի
# Բարև!
# Հետո ֆունկցիայի