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

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

Ինիցիալիզացիաներ
Գոյություն ունի ծույլ բեռնման ինիցիալիզացիայի չորս ընդհանուր եղանակ.
 ծույլ ինիցալիզացիա
 վիրտուալ պրոքսի
 ուրվական
 արժեք պահող

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

Ծույլ ինիցալիզացիա 
Ծույլ ինիցալիզացիայի դեպքում ծույլորեն բեռնվող օբյեկտի սկզբնական արժեքը տրվում է 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 լինել-չլինելով, հարկ է լինում ազդանշանային ֆունկցիա ներդնել, որը կտեղեկացնի օբյեկտի ինիցիալիզացված չլինելու մասին։

Վիրտուալ պրոքսի 
Վիրտուլ պրոքսին օբյեկտ է նույն ինտերֆեյսով, ինչ-որ ռեալ օբյեկտը։ Առաջին անգամ երբ կանչվում է օբյեկտը, կատարվում է ռեալ օբյեկտի բեռնում, իսկ այնուհետև ուղարկվում  է ռեալ օբյեկտին։

Ուրվական 
"Ուրվականն" հանդիսանում է մասնակի բեռնված օբյեկտ։ Այն կարող է պարունակել միայն օբյեկտի ինդեֆիկատորը, բայց օբյեկտի անձնական տվյալները բեռնում է այն ժամանակ, երբ տեղի է ունենում առաջին կանչը։

Արժեք պահող 
Արժեք պահողը ջեներիկ օբյեկտ է, որը մշակում է ծույլ բեռնման վարքը։
private ValueHolder<Widget> valueHolder;
 
public Widget MyWidget 
{
    get
    {
        return valueHolder.GetValue();
    }
}

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

Ծրագրավորում