**Ադապտեր** (անգլ.՝ Adapter), կառուցվածքային նախագծման ձևանմուշ, որը նախատեսված է օբյեկտի ֆունկցիաների կազմակերպման նպատակով հատուկ ինտերֆեյս ստեղծելու համար։

Ընդհանուր հասկացողություններ
----------------------------

* Client - հայցող
* Instance - նմուշ
* Implementation - իրականացում
* Product - արգասիք

Նկարագրություն
--------------

Ադապտերն համատեղում է երկու տարբեր ինտերֆեյսները։ Ինտերֆեյսները կարող են լինել անհամատեղելի, բայց ներքին ֆունկցիանալությունը պետք է համապատասխանի պահանջներին։ Ադապտերը թույլ է տալիս անհամատեղելի ինտերֆեյսներով դասերը համատեղել և այն բերել հայցողի պահանջված ինտերֆեյսին։

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

Գոյություն ունի երկու ձևի Ադապտեր ձևանմուշ.

* Օբյեկտ ադապտեր ձևանմուշ
* Դաս ադապտեր ձևանմուշ

### Օբյեկտ ադապտեր ձևանմուշ

Այս մոդելի դեպքում ադապտերն իր մեջ որպես դասի նմուշ պարունակում է փոփոխման ենթակա ինտերֆեյսով դասը։ Այս դեպքում ֆունկցիաների կանչն իրականավում է նմուշի համապատասխան ֆունկցիան կանչելով։

Օբյեկտ ադապտեր ձևանմուշի UML դիագրամը: Ադապտերը թաքցնում է ադապտացված դասի ինտերֆեյսը հայցողից:
### Դաս ադապտեր ձևանմուշ

Այս տիպի ադապտերն օգտագործում է բազմակի պոլիֆորմ ինտերֆեյսների իրականացում կամ էլ ժառանգում է և՜ ադապտացնող դասը, և՜ ադապտացվողը։ Այսպիսով ստեղծվում է դաս միայն ինտերֆեյս ապահովելու համար։ Նման օրինակի ադապտերների օգտագործումը բնորոշ է այնպիսի ծրագրավորման լեզուներին, որոնք չեն ապահովում բազմակի ժառանգում (օրինակ Java)։

Օբյեկտ ադապտեր ձևանմուշի UML դիագրամը

Օրինակներ
---------

### C#

```
 using System;
 
 namespace Adapter
 {
 
 class MainApp
 {
 static void Main()
 {
 // Create adapter and place a request
 Target target = new Adapter();
 target.Request();
 
 // Wait for user
 Console.Read();
 }
 }
 
 // "Target"
 
 class Target
 {
 public virtual void Request()
 {
 Console.WriteLine("Called Target Request()");
 }
 }
 
 // "Adapter"
 
 class Adapter : Target
 {
 private Adaptee adaptee = new Adaptee();
 
 public override void Request()
 {
 // Possibly do some other work
 // and then call SpecificRequest
 adaptee.SpecificRequest();
 }
 }
 
 // "Adaptee"
 
 class Adaptee
 {
 public void SpecificRequest()
 {
 Console.WriteLine("Called SpecificRequest()");
 }
 }
 }

```

### Java (ժառանգման միջոցով)

```
// Target
public interface Chief
{
 public Object makeBreakfast();
 public Object makeLunch();
 public Object makeDinner();
}

// Adaptee
public class Plumber
{
 public Object getScrewNut()
 { ... }
 public Object getPipe()
 { ... }
 public Object getGasket()
 { ... }
}

// Adapter
public class ChiefAdapter extends Plumber implements Chief
{
 public Object makeBreakfast()
 {
 return getGasket();
 }
 public Object makeLunch()
 {
 return getPipe();
 }
 public Object makeDinner()
 {
 return getScrewNut();
 }
}

// Client
public class Client
{
 public static void eat(Object dish)
 { ... }

 public static void main(String[] args)
 {
 Chief ch = new ChiefAdapter();
 Object dish = ch.makeBreakfast();
 eat(dish);
 dish = ch.makeLunch();
 eat(dish);
 dish = ch.makeDinner();
 eat(dish);
 callAmbulance();
 }
}

```

### Java (կոմպոզիցիայի միջոցով)

```
// Ֆայլ Chief.java

public interface Chief {

 public Object makeBreakfast();
 public Object makeDinner();
 public Object makeSupper();
 
}

// Ֆայլ Plumber.java

public class Plumber {

 public Object getPipe(){
 return new Object();
 }
 
 public Object getKey(){
 return new Object();
 }
 
 public Object getScrewDriver(){
 return new Object();
 }
 
}

// Ֆայլ ChiefAdapter.java

public class ChiefAdapter implements Chief{

 private Plumber plumber = new Plumber();

 @Override
 public Object makeBreakfast() {
 return plumber.getKey();
 }

 @Override
 public Object makeDinner() {
 return plumber.getScrewDriver();
 }

 @Override
 public Object makeSupper() {
 return plumber.getPipe();
 }

}

// Ֆայլ Client.java

public class Client {

 public static void main (String [] args){
 Chief chief = new ChiefAdapter();
 
 Object key = chief.makeDinner();
 }
 
}

```

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

1. 1 2  Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bates, Bert (2004). «Head First Design Patterns» (paperback). O'Reilly Media: 244. ISBN 978-0-596-00712-6. OCLC 809772256. Վերցված է 2013 թ․ ապրիլի 30-ին. `{{cite journal}}`: Cite journal requires `|journal=` (օգնություն)

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

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

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

 |
|  |
| Ստեղծող ձևանմուշներ | 
* Ծույլ բեռնում
* Բազմակի օգտագործման
* Օբյեկտների ավազան
* Ռեսուրսի ստանալը ինիցիալիզացիա է

 |
|  |
| Կառուցվածքային ձևանմուշներ | Ճակատը հսկող
* Մոդուլ
 |
|  |
| Համաձայնեցման ձևանմուշներ | 
* Ակտիվ օբյեկտ
* Հենվող
* Մեկուսացում կրկնակի ստուգումով
* Ասինքրոն կանչի մեթոդ
* Պահպանվող կախոց
* Ռեգիստրացնող
* Կողպեքավորող
* Մոնիտոր
* Նախագործող
* Ապագործող
* Ընթերցողներ-գրողի կողպեք
* Պլանավորման
* Հոսքերի ավազանի
* Հոսքերի լոկալ հիշողություն

 |
|  |
| Ճարտարապետական ձևանմուշներ | 
* Ճակատը հսկող ձևանմուշ
* Զավթող ձևանմուշ
* ձևանմուշի ներկայացման վերահսկում
* Բազմաշերտ
* Հատկորոշում
* Հրատարակող-ստորագրող
* Մերկ օբյեկտներ
* Ծառայության լոկատոր
* Ակտիվ գրառման
* Բազմության իդենտիֆիկացման
* Data access object
* Data transfer object

 |
|  |
| Այլ ձևանմուշներ | 
* Կախվածության ներդնում
* Mock օբյեկտ
* Զրոյական օբյեկտ
* Ծառայող
* Թունելային տարատեսակի

 |

 |