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

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

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

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.


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * դ
* ք
* խ
Նախագծման ձևանմուշներ |
| --- |
|  |
| ԳօՖիձևանմուշներ | 

|  |  |
| --- | --- |
| Ստեղծող | Աբստրակտ ֆաբրիկա • Կառուցող • Ֆաբրիկային մեթոդ • Նախատիպ • Եզակի օգտագործման |
| Կառուցվածքային | Ադապտեր • Կամուրջ • Կազմող • Դեկորատոր • Ճակատ • Հարմարեցնող • Պրոքսի |
| Վարքագծային | Պարտականությունների շղթա • Հրաման • Թարգմանիչ • Իտերատոր • Միջնորդ • Պահպանող • Դիտորդ • Վիճակ • Մարտավարություն • Կաղապարային մեթոդ • Այցելող |

 |
|  |
| Ստեղծող ձևանմուշներ | Ծույլ բեռնում • Բազմակի օգտագործման • Օբյեկտների ավազան • Ռեսուրսի ստանալը ինիցիալիզացիա է |
|  |
| Կառուցվածքային ձևանմուշներ | Ճակատը հսկող • Մոդուլ |
|  |
| Համաձայնեցման ձևանմուշներ | Ակտիվ օբյեկտ • Հենվող • Մեկուսացում կրկնակի ստուգումով • Ասինքրոն կանչի մեթոդ • Պահպանվող կախոց • Ռեգիստրացնող • Կողպեքավորող • Մոնիտոր • Նախագործող • Ապագործող • Ընթերցողներ-գրողի կողպեք • Պլանավորման • Հոսքերի ավազանի • Հոսքերի լոկալ հիշողություն |
|  |
| Ճարտարապետական ձևանմուշներ | Ճակատը հսկող ձևանմուշ • Զավթող ձևանմուշ • ձևանմուշի ներկայացման վերահսկում • Բազմաշերտ • Հատկորոշում • Հրատարակող-ստորագրող • Մերկ օբյեկտներ • Ծառայության լոկատոր • Ակտիվ գրառման • Բազմության իդենտիֆիկացման • Data access object • Data transfer object |
|  |
| Այլ ձևանմուշներ | Կախվածության ներդնում • Mock օբյեկտ • Զրոյական օբյեկտ • Ծառայող • Թունելային տարատեսակի |

 |