مشخصات مقاله
-
1591
-
0.0
-
7960
-
0
-
0
Design Patterns-الگوی Adapter
Adapter
در صورتی که مقالات قبلی را مطالعه نکرده اید، از طریق لینک های زیر قابل دسترس هستند:
- Design Patterns
- Singleton Pattern
- Simple Factory Pattern
- Abstract Factory Pattern
- Factory Method Pattern
- Prototype Pattern
- Builder Pattern
- Façade Pattern
بر اساس تعریف 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 empList)
{
foreach(stringempinempList)
{
Console.WriteLine("Employee Name: " + emp);
}
}
}
///
/// The 'ITarget' interface
///
public interface IEmployee
{
void PrintEmployee(List empList);
}
///
/// The 'Adapter' class
///
public class EmployeeAdapter: IEmployee
{
public void PrintEmployee(List empList)
{
EmployeeDetail.ListEmployee(empList);
}
} همانطور که در کد فوق مشاهده می کنید یک adapter با نام EmployeeAdapter، یک اینترفیس هدف با نام IEmployee و یک adapter با نام EmployeeDetail، تعریف کرده ایم. حالا باید برای Client این عملیات را تعریف کنیم:
static void Main()
{
Console.Title = "Adapter pattern demo";
//Client setup
ListempList = newList();
empList.Add("Prakash");
empList.Add("Amit");
empList.Add("Pankaj");
IEmployeeemp = newEmployeeAdapter();
emp.PrintEmployee(empList);
} خروجی:
همانطور که مشاهده می کنید، client با استفاده از کلاس EmployeeAdapter می تواند رکوردهای مربوط به هر کارمند را چاپ کند.
به طور خلاصه، الگوی Adapter زمانی استفاده می شود که سیستم جاری نیاز داشته باشد کارهای یک سیستم دیگر را انجام دهد. به طوری که انجام آن کارها با سیستم مورد نظر سازگار نباشد. برخی از مثال های معروف عبارتند از SqlAdapter، OracleAdapter و MySqlAdapter در
ADO.NET.