«Դեկորատոր (նախագծման ձևանմուշ)»–ի խմբագրումների տարբերություն

Content deleted Content added
Նոր էջ «{{Տեղեկաքարտ նախագծման մոդել | Անուն = Դեկորատոր | Անգլերեն անվանում` = Decorator | Տեսակ` = Կառուցվածքայի...»:
 
Տող 20.
* Implementation - իրականացում
* Product - արգասիք
 
== Հիմնական բնութագիրներ ==
=== Խնդիր ===
Օբյեկտը, որը պետք է օգտագործվի, իրականցնում է հիմնական ֆունկցիաները: Բայց կարող է անհրաժեշտ լինել նրան ավելացնել որոշակի լրացուցիչ ֆունկցիոնալություն, որը կարող է օգտագործել հիմնական ֆունկցիոնալությունից առաջ, հետո և նույնիսկ հիմնական ֆունկցիոնալության փոխարեն:
 
=== Լուծման տարբերակ ===
Դեկորատորը օբյեկտի ֆունկցիոնալության ընդլայնումը դիտարկում է առանց ենթադասերի ստեղծման:
 
=== Մասնակիցներ ===
<code>ConcreteComponent</code> դաս, որտեղ Դեկորատորի միջոցով ավելացվում է նոր ֆունկցիոնալություն: Որոշ դեպքերում բազային ֆունկցիոնալությունը ներկայացվում է դասերով, որոնք ստեղծվել են <code>ConcreteComponent</code> դասի կողմից: Այդ դեպքերում <code>''ConcreteComponent''</code> արդեն կոնկրետ դաս չէ, այլ աբստրակտ է: <code>''Component''</code> աբստրակտ դասը տալիս է ինտերֆեյս բոլոր այդ դասերի օգտագործման համար:
 
=== Հետևություն ===
# Ավելացվող ֆունկցիոնալությունը իրագործվում է ոչ մեծ օբյեկտներում: Առավելությունը կայանում է նրանում, որ այդ ֆունկցիոնալությունը դինամիկ կերպով ավելանում է <code>ConcreteComponent</code> հիմնական ֆունկցիոնալությունից առաջ կամ հետո:
# Թույլ է տալիս դասերի վերին հիերարխիայում խուսափել ֆունկցիոնալությունների գերծանրաբեռնումից
# Դեկորատորը և նրա բաղկացուցիչ մասերը իդենտիկ չեն:
 
=== Իրականացում ===
Ստեղծվում է աբստրակտ դաս, որն իրենից ներկայացնում է ելակետային դաս: Ինչպես նաև ստեղծվում են նրո դասեր, որոնք ավելացվում են ֆունկցիայի դասի մեջ: Դաս-դեկորատորներում նոր ֆունկցիաները կանչվում են ըստ հարկ եղած հերթականության` հերթական օբյեկտի կանչից առաջ կամ հետո:
 
Ցանկության դեպքում հնարավոր է նաև օգտագործել ելակետային դասը (առանց ֆունկցիոնալության ընդարձակման), եթե նրա օբյեկտի վրա պահպանվել է հղումը:
 
== Ծանոթագրություններ ==