Jump to content

Ծույլ բեռնում

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Ծույլ բեռնում
ՏեսակՍտեղծող
ՆշանակությունԽնդիրների լուծման կամ օբյեկտների ստեղծման հետաձգում, քանի դեռ անհրաժեշտություն չկա։
ԱռավելություններՃիշտ կիրառման դեպքում ծրագրի աշխատանքը դարձնում է էֆեկտիվ
Նկարագրությունը ԳօՖի
"Design Patterns" գրքում
Ոչ

Ծույլ բեռնումը նախագծման ստեղծող ձևանմուշ է, որն օգտագործում է ծրագրավորման մեջ օբյեկտների ինիցիալիզացիան հետաձգելու համար, քանի դեռ օբյեկտի անհրաժեշտությունը չկա։ Եթե ձևանմուշը ճիշտ կիրառվի, ապա հնարավոր է այն ծրագրի աշխատանքն ավելի էֆեկտիվ դարձնի։ Ծույլ բեռնման հակապատկերն է հանդիսանում ագահ բեռնումը։

Ինիցիալիզացիաներ

[խմբագրել | խմբագրել կոդը]

Գոյություն ունի ծույլ բեռնման ինիցիալիզացիայի չորս ընդհանուր եղանակ[1].

  1. ծույլ ինիցալիզացիա
  2. վիրտուալ պրոքսի
  3. ուրվական
  4. արժեք պահող

Ինիցիալիզացիաներից ամեն մեկն ունի իր առավելություններն ու թերությունները։

Ծույլ ինիցալիզացիա

[խմբագրել | խմբագրել կոդը]

Ծույլ ինիցալիզացիայի դեպքում ծույլորեն բեռնվող օբյեկտի սկզբնական արժեքը տրվում է 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();
    }
}

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

[խմբագրել | խմբագրել կոդը]
  1. Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2003, pp.200-214. ISBN 0-321-12742-0.