سلام دوستان وکاربران گرامی ، حال شماچطوره؟  انشاظ.. سلامت و شاد باشید و ازاینکه سلامت  هستیم ازخدای خود سپاسگذار. با اموزشی دیگر در مورد ·        Design Patterns ها همراه شما هستیم و امیدوارم که از ان استفاد ه ببرید.
Adapter

·
بر اساس تعریف GOF “الگوی Adapter، یک اینترفیس از یک کلاس را به اینترفیس مورد نظر client تبدیل می کند. Adapter این اجازه را می دهد کلاس هایی که اینترفیس های ناهمسازگار دارند با هم کار کنند.”

درواقع الگوی Adapter دو اینترفیس ناهمسازگار، که کارایی های یکسانی دارند اما نحوه فراخوانی متدهایشان متفاوت است، را به هم متصل میکند. گاهی اوقات به عنوان Warapper یا پوشاننده نیز شناخته می شود.
چگونگی عملکرد الگوی Adapter

از الگوی Adapter برای ادغام شدن با یکسری اجزاء خارجی استفاده می شود که این اجزاء از نظر عملکرد یکسان هستند و فقط نحوه فراخوانی توابعشان کمی با هم فرق دارند. فرض کنید یک کلاس Employee با یک متد PrintEmployee داریم و قرار است با یک کلاس ارائه دهنده کارمند قراردادی با نام EmployeeDetail و یک تابع با نام ListEmployee تعامل داشته باشد.

در این مثال می توانیم یک کلاس adapter (تطبیقی) بسازیم که کلاس خارجی EmployeeDetail را بپوشاند. بنابراین فراخوانی متد PrintEmployee() در adapter به متد ListEmployee() کلاس خارجی  واگذار (Delegate) می شود.

///

///Adaptee Class

///

public class EmployeeDetail

{

//// Code below from the existing library does not need to be changed.

public static void ListEmployee(List <string >empList)

{

foreach(stringempinempList)

{

Console.WriteLine(“Employee Name: ” + emp);

}

}

}

///

/// The ‘ITarget’ interface

///

public interface IEmployee

{

void PrintEmployee(List <string >empList);

}

///

/// The ‘Adapter’ class

///

public class EmployeeAdapter: IEmployee

{

public void PrintEmployee(List <string >empList)

{

EmployeeDetail.ListEmployee(empList);

}

}

همانطور که در کد فوق مشاهده می کنید یک adapter با نام EmployeeAdapter، یک اینترفیس هدف با نام IEmployee و یک adapter با نام EmployeeDetail، تعریف کرده ایم. حالا باید برای Client این عملیات را تعریف کنیم:

static void Main()

{

Console.Title = “Adapter pattern demo”;

//Client setup

List<string>empList = newList<string>();

empList.Add(“Prakash”);

empList.Add(“Amit”);

empList.Add(“Pankaj”);

IEmployeeemp = newEmployeeAdapter();

emp.PrintEmployee(empList);

}

خروجی:

آموزشگاه برنامه نویسی تحلیل داده

همانطور که مشاهده می کنید، client با استفاده از کلاس EmployeeAdapter می تواند رکوردهای مربوط به هر کارمند را چاپ کند.

به طور خلاصه، الگوی Adapter زمانی استفاده می شود که سیستم جاری نیاز داشته باشد کارهای یک سیستم دیگر را انجام دهد. به طوری که انجام آن کارها با سیستم مورد نظر سازگار نباشد. برخی از مثال های معروف عبارتند از SqlAdapter، OracleAdapter و MySqlAdapter در ADO.NET.