قبل از شروع، من از شما درخواست می کنم که از مقالات قبلی در مجموعه الگوهای طراحی دیدن کنید :
- الگوهای طراحی ساده شده: قسمت 1
- الگوهای طراحی ساده شده - قسمت 2 (Singleton)
- الگوهای طراحی ساده شده - قسمت 3 (کارخانه ساده)
- الگوهای طراحی ساده شده - قسمت 4 (کارخانه انتزاعی)
- الگوهای طراحی ساده شده - قسمت 5 (روش کارخانه)
- الگوهای طراحی ساده شده - قسمت 6 (نمونه اولیه)
- الگوهای طراحی ساده شده - قسمت 7 (سازنده)
- الگوهای طراحی ساده شده - قسمت 8 (نما)
من اینجا هستم تا بحث پیرامون الگوهای طراحی را ادامه دهم. امروز یکی از الگوهای طراحی سازه به نام Adapter را مرور می کنیم. قبل از صحبت در مورد اجرای آن، اجازه دهید با تعریف آن شروع کنیم.
مطابق با بچه های GOF، الگوی آداپتور به صورت زیر تعریف می شود.
«اینترفیس یک کلاس را به واسط دیگری که مشتریان انتظار دارند تبدیل کنید. آداپتور به کلاسها اجازه میدهد با هم کار کنند که به دلیل رابطهای ناسازگار، غیر از این ممکن نبود.»
خوب! بیایید منظور آنها را بفهمیم.
این بدان معناست که الگوی آداپتور دو رابط ناسازگار را به هم پیوند می دهد که عملکرد یکسانی دارند اما روش های آنها کمی متفاوت خوانده می شود. گاهی به آن لفاف نیز می گویند.
الگوی آداپتور چگونه کار می کند
الگوی آداپتور را می توان برای ادغام با سایر اجزای خارجی استفاده کرد که ممکن است همان عملکرد مورد نیاز ما را داشته باشند اما عملکردهای آنها کاملاً به یک شکل نامیده نمی شوند. فرض کنید ما یک کلاس Employee با تابعی داریم که به عنوان PrintEmployee تعریف شده است و با یک ارائه دهنده کارمند قراردادی خارجی کار می کنیم که یک کلاس EmployeeDetail با تابعی به عنوان ListEmployee دارد .
در اینجا میتوانیم یک کلاس آداپتور ایجاد کنیم تا EmployeeDetailclass خارجی را بپیچانیم تا یک فراخوانی به PrintEmployee() آداپتور به ListEmployee() کلاس خارجی واگذار شود.
بیایید با یک مثال ساده این را بفهمیم.
- ///<summary>
- ///Adaptee Class
- ///</summary>
- 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);
- }
- }
- }
- ///<summary>
- /// The 'ITarget' interface
- ///</summary>
- public interface IEmployee
- {
- voidPrintEmployee(List < string > empList);
- }
- ///<summary>
- /// The 'Adapter' class
- ///</summary>
- public class EmployeeAdapter: IEmployee
- {
- public void PrintEmployee(List < string > empList)
- {
- EmployeeDetail.ListEmployee(empList);
- }
- }
همانطور که در بالا می بینید ما Adapter (EmployeeAdapter)، Target Interface (IEmployee)، Adapter (EmployeeDetail) را تعریف کرده ایم. حالا بیایید کلاینت را تعریف کنیم تا اکشن را از انتها به پایان ببینیم.
- staticvoid 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);
- }
خروجی:
در اینجا می بینیم که با کمک کلاس EmployeeAdapter، مشتری می تواند سوابق کارمندان را چاپ کند.
بنابراین به طور خلاصه، الگوی آداپتور زمانی می تواند مورد استفاده قرار گیرد که سیستم فعلی نیاز به استفاده از توابع سیستم دیگری دارد که با آن ناسازگار است. برخی از محبوب ترین نمونه ها می توانند SqlAdapter، OracleAdapter، MySqlAdapter در ADO.NET باشند.
امیدوارم که مقاله را دوست داشته باشید. منتظر نظرات/پیشنهادات شما هستم.
مقالات بیشتر در مورد الگوهای طراحی را بخوانید :