Ծույլ բեռնում
Ծույլ բեռնում | |
---|---|
Տեսակ | Ստեղծող |
Նշանակություն | Խնդիրների լուծման կամ օբյեկտների ստեղծման հետաձգում, քանի դեռ անհրաժեշտություն չկա։ |
Առավելություններ | Ճիշտ կիրառման դեպքում ծրագրի աշխատանքը դարձնում է էֆեկտիվ |
Նկարագրությունը ԳօՖի "Design Patterns" գրքում | Ոչ |
Ծույլ բեռնումը նախագծման ստեղծող ձևանմուշ է, որն օգտագործում է ծրագրավորման մեջ օբյեկտների ինիցիալիզացիան հետաձգելու համար, քանի դեռ օբյեկտի անհրաժեշտությունը չկա։ Եթե ձևանմուշը ճիշտ կիրառվի, ապա հնարավոր է այն ծրագրի աշխատանքն ավելի էֆեկտիվ դարձնի։ Ծույլ բեռնման հակապատկերն է հանդիսանում ագահ բեռնումը։
Ինիցիալիզացիաներ
[խմբագրել | խմբագրել կոդը]Գոյություն ունի ծույլ բեռնման ինիցիալիզացիայի չորս ընդհանուր եղանակ[1].
- ծույլ ինիցալիզացիա
- վիրտուալ պրոքսի
- ուրվական
- արժեք պահող
Ինիցիալիզացիաներից ամեն մեկն ունի իր առավելություններն ու թերությունները։
Ծույլ ինիցալիզացիա
[խմբագրել | խմբագրել կոդը]Ծույլ ինիցալիզացիայի դեպքում ծույլորեն բեռնվող օբյեկտի սկզբնական արժեքը տրվում է null։ Օբյեկտի ամեն մի կանչի դպեքում նախ ստուգվում է օբյեկտի արժեքը null է, թե ոչ։ Եթե օբյեկտը գոյություն ունի, այն միանգամից վերադարձվում է, հակառակ դեպքում այն անմիջապես ստեղծվում է և նոր վերադարձվում, ինչպես որ ցույց է տրված C # լեզվի օրինակում։
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get
{
if (myWidget == null)
{
myWidget = Widget.Load(myWidgetID);
}
return myWidget;
}
}
Կամ ?? օպերատորի միջոցով.
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get { return myWidget = myWidget ?? Widget.Load(myWidgetID); }
}
Այս մեթոդն իրականացման տեսանկյունից ամենապարզն է։ Սակայն որոշ դեպքերում, չնայած նրան, որ օբյեկտի գոյությունը կարելի է ստուգել արժեքի null լինել-չլինելով, հարկ է լինում ազդանշանային ֆունկցիա ներդնել, որը կտեղեկացնի օբյեկտի ինիցիալիզացված չլինելու մասին։
Վիրտուալ պրոքսի
[խմբագրել | խմբագրել կոդը]Վիրտուլ պրոքսին օբյեկտ է նույն ինտերֆեյսով, ինչ-որ ռեալ օբյեկտը։ Առաջին անգամ երբ կանչվում է օբյեկտը, կատարվում է ռեալ օբյեկտի բեռնում, իսկ այնուհետև ուղարկվում անգլ.՝ delegate է ռեալ օբյեկտին։
Ուրվական
[խմբագրել | խմբագրել կոդը]"Ուրվականն" հանդիսանում է մասնակի բեռնված օբյեկտ։ Այն կարող է պարունակել միայն օբյեկտի ինդեֆիկատորը, բայց օբյեկտի անձնական տվյալները բեռնում է այն ժամանակ, երբ տեղի է ունենում առաջին կանչը։
Արժեք պահող
[խմբագրել | խմբագրել կոդը]Արժեք պահողը ջեներիկ օբյեկտ է, որը մշակում է ծույլ բեռնման վարքը։
private ValueHolder<Widget> valueHolder;
public Widget MyWidget
{
get
{
return valueHolder.GetValue();
}
}
Ծանոթագրություններ
[խմբագրել | խմբագրել կոդը]- ↑ Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2003, pp.200-214. ISBN 0-321-12742-0.
|