کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

Design Patterns-الگوی Adapter

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 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);

} 

خروجی:


آموزش Entity FrameWork 

به همراه Design Pattern

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

1395/02/05 7964 1592
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...