Ստեղծող ձևանմուշներ

Ստեղծող ձևանմուշները ծրագրային ապահովման ճարտարագիտության հանդիսանում են նախագծման ձևանմուշներ, որոնք գործ ունեն օբյեկտներ ստեղծելու մեխանիզմների հետ՝ փորձելով օբյեկտներ ստեղծել իրավիճակի անհրաժեշտությունից ելնելով։ Օբյեկտի ստեղծման հասարակ տարբերակն այս դեպքերում կարող է բերել ծրագրի նախագծման բարդացման, իսկ նախագծման ձևանմուշներն այս դեպքում լուծում են խնդիրը՝ այսպես թե այնպես ղեկավարելով օբյեկտի ստեղծումը։
Ստեղծող ձևանմուշները բաղկացած են երկու կարևոր գաղափարներից։ Առաջինն ինկապսուլյացիա է անում կոնկրետ դասերի մասին գիտելիքները, որ համակարգն օգտագործում է։ Մյուսը թաքցնում է դասերի նմուշների (անգլ.՝ instance) ստեղծումն ու միավորումը։
Ստեղծող ձևանմուշները բաժանվում են Օբյեկտ ստեղծող ձևանմուշների և Դաս ստեղծող ձևանմուշների, որտեղ Օբյեկտ ստեղծողը գործ ունի օբյեկտներ ստեղծելու, իսկ Դաս ստեղծողները դասերի հետ։ Ավելի մանրամասնորեն որ ասենք, Օբյեկտ ստեղծողները օբյեկտի ստեղծման մի մասը թողնում են այլ օբյեկտի վրա, իսկ Դաս ստեղծողները դասերի ստեղծում թողնում են օբյեկտի ենթադասերի վրա։
Հինգ առավել հայտնի ստեղծման ձևանմուշները հետևյալն են.

Աբստրակտ ֆաբրիկա, որն ինտերֆեյս է տալիս կապակցված կամ կախյալ օբյեկտներ ստեղծելու համար՝ առանց սահմանելու կոնկրետ դասի օբյեկտները։
Կառուցող, որն անջատում է բարդ օբյեկտի կառուցումը նրա ներկայացումից այնպես, որ ստեղծման պրոցեսը կարող է այլ ներկայացում ստեղծել։
Ֆաբրիկային մեթոդ, որը թույլ է տալիս տարբերակել դասի օրինակը (անգլ.՝ instance) ենթադասերից։
Նախատիպ, որը որոշում է օբյեկտի տիպը, որպեսզի նրանով ստեղծի նախատիպային օրինակ և նոր օրինակներ ստեղծի նախատիպերի պատճենավորման միջոցով։
Եզակի, որը երաշխավորում է, որ դասն ունի միայն մեկ օրինակ և նրա համար ապահովում է գլոբալ հասանելիության կետ։


== Ընդհանուր հասկացողություններ ==
Client - հայցող
Instance - նմուշ
Implementation - իրականացում
Product - արգասիք


== Նկարագրություն ==
Ստեղծող ձևանմուշները նպատակ ունեն առանձնացնել օբյեկտի ստեղծումը և ներկայացումը։ Նրանք մեծացնում են համակարգի ճկունությունը այն տեսանկյունից, թե երբ և որտեղ է ստեղծվում օբյեկտը։


== Կիրառություն ==
Այս ձևանմուշների օգտագործումն անհրաժեշտ է լինում, երբ համակարգն ավելի կախված է օբյեկտների կոմպոզիցիայից, քան դասերի ժառանգությունից։ Կոշտ կոդավորման վարքը համարվում է ոչ ճկուն, քանի որ այն պահանջում է չեղարկում կամ կրկնակի օգտագործում այն ամենը, ինչը որ պետք է փոփոխել դիզայնի մեջ։ Բացի այդ կոշտ կոդավորումը չի նպաստում կոդի հավելյալ օգտագործմանը և դժվար է հետևել սխալները։ Դրա համար էլ ստեղծող ձևանմուշների օգտագործումը համարվում է օգտակար, քան կոշտ կոդավորված վարքի օգտագործումը։
Ստեղծող ձևանմուշների օգտագործումը դիզայնը դարձնում է ավելի ճկուն։ Նրանք տարբեր ճանապարհներ (մոդելներ) են առաջարկում, որպեսզի հեռացնեն կոնկրետ դասերի վրա բացահայտ հղումները, որոնց կարիքն ունեն դասերի նմուշները (անգլ.՝ instantiate)։ Այլ կերպ ասած, նրանք անկախություն են ստեղծում օբյեկտների և դասերի միջև։
Ստեղծող ձևանմուշներն օգտագործվում են, երբ.

Համակարգը պետք է անկախ լինի նրանից, թե ինչպես է օբյեկտները և արգասիքները (անգլ.՝ products) ստեղծվում։
Կապակցված օբյեկտների բազմությունն նախատեսված է միասնական օգտագործման համար։
Դասի գրադարանի կամ արգասիքի (անգլ.՝ products) ներկայացումը թաքցնելու համար՝ ներկայացնելով միայն նրանց օգտագործման ինտերֆեյսները։
Անկախ բարդ օբյեկտների տարբեր ներկայացումներ ապահովելու համար։
Երբ դասը ցանկանում է, որ ենթադասը իրականացնի ստեղծվող օբյեկտի իրականացումը։
Դասերի նմուշները ստեղծվում են իրականացման պահին։
Երբ պետք է լինի ընդամենը դասի մեկ նմուշ և այն դիմողի համար պետք է հասանելի լինի ժամանակի ցանկացած պահին։
Դասերի օրինակները պետք է ընդլայնվեն առանց նրանց մոդիֆիկացնելու։


== Կառուցվածք ==

Նկարում բերված է դասերի դիագրամի պարզագույն օրինակ, որն ընդհանուր է շատ ստեղծող ձևանմուշների մոտ։ Ուշադրություն դարձրեք, որ ստեղծող ձևանմուշները պահանջում են լրացուցիչ և տարբեր մասնակից դասեր։
Մասնակիցներ։

Creator: Հայտարարում է օբյեկտի ինտերֆեյսը։ Վերադարձնում է օբյեկտը։
ConcreteCreator: Իրականացնում է օբյեկտի ինտերֆեյսը։


== Օրինակներ ==
Ստեղծող ձևանմուշների որոշ օրինակներ ներառում են.

Աբստրակտ ֆաբրիկա - կենտրոնացնում է որոշումն այն մասին, թե ինչ ֆաբրիկա է ստեղծվում դասի նմուշը
Ֆաբրիկային մեթոդ - կենտրոնավորում է ինքնատիպ օբյեկտի ստեղծումը ընտրելով նրա մի քանի իրականացումներից մեկը
Կառուցող - առանձնացնում է բարդ օբյեկտի ստեղծումը նրա ներկայացումից այնպես, որ կառուցման պահին կարելի է ստեղծել տարբեր ներկայացումներ
Ծույլ բեռնում - մարտավարություն հետաձգելու օբյեկտի ստեղծումը կամ թանկարժեք պրոցեսի հաշվարկը, քանի դեռ այն անհրաժեշտ չէ
Օբյեկտների ավազան - խուսափել թանկարժեք ձեռքբերումներից (անգլ.՝ acquisition) և միջոցների տրամադրումից ի հաշիվ այլևս չօգտագործվող օբյեկտների վերաշրջանառության
Նախատիպ - օգտագործվում է, երբ օբյեկտների տեսակները բնորոշում են նախատիպի օրինակը, որի կլոնավորման միջոցով ստեղծվում են նոր օբյեկտները
Եզակի - սահմանափակում է դասերի թույլատրելի նմուշը մեկ հնարավոր օբյեկտի վրա


== Ծանոթագրություններ ==