الگوی آداپتور – انجمن DEV

Summarize this content to 400 words in Persian Lang
الگوی آداپتور چیست؟
الگوی آداپتور یک الگوی ساختاری است که رابط یک کلاس را به رابط دیگری که مشتریان انتظار دارند تبدیل می کند. آداپتور به کلاسها اجازه میدهد با هم کار کنند که به دلیل رابطهای ناسازگار امکانپذیر نبود.
چه زمانی از آن استفاده کنیم؟
زمانی که میخواهید از کدهای قدیمی یا کتابخانههای شخص ثالث استفاده کنید، اما رابط آن با سایر بخشهای برنامه شما ناسازگار است، از الگوی آداپتور استفاده کنید.
مشکل
ما از یک چاپگر قدیمی استفاده کرده ایم اما اکنون نرم افزار رایگان جدیدی اختراع شده است که با چاپگر جدید ادغام شده است. مشکل این است که ما نمی توانیم چاپگر جدید بخریم اما همچنان می خواهیم از نرم افزار استفاده کنیم. آیا راهی برای استفاده از نرم افزار جدید اما با چاپگر قدیمی که با نرم افزار ناسازگار است وجود دارد؟ بله، در اینجا الگوی آداپتور مفید است.
راه حل
نرم افزار جدیداین مشتری ماست این فقط قبول میکنه ModernPrinter رابط کاربری NewSoftware فکر می کند که با آن سروکار دارد ModernPrinter.
چاپگر مدرنرابط سازگار را برای Client فراهم می کند.
آداپتور چاپگرفراخوانی متد را دریافت می کند modernPrint() از ModernPrinter، سپس آن را به فرمت ترجمه می کند
OldPrinterاین همان چیزی است که ما می خواهیم استفاده کنیم اما رابط کاربری آن با ما ناسازگار است NewSoftware. oldPrint() زمانی که اعدام می شود ModernPrinter تماس می گیرد modernPrint().
ساختار
به یاد داشته باشید که یک آداپتور را می توان با هر زیر کلاسی از adaptee استفاده کرد.
پیاده سازی در جاوا
public class OldPrinter {
public void oldPrint(String document) {
System.out.println(document + ” by old printer”);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
public interface ModernPrinter {
void modernPrint(String document);
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
public class PrinterAdapter implements ModernPrinter {
private OldPrinter oldPrinter;
public PrinterAdapter(OldPrinter oldPrinter) {
this.oldPrinter = oldPrinter;
}
@Override
public void modernPrint(String document) {
oldPrinter.oldPrint(document);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
public class NewSoftware {
public static void main(String[] args) {
OldPrinter oldPrinter = new OldPrinter();
// Because PrinterAdapter implements ModernPrinter, it can be seen
// as a ModernPrinter which is integrated with NewSoftware
ModernPrinter adapter = new PrinterAdapter(oldPrinter);
adapter.modernPrint(“Hello world”);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در فرض ما، شما NewSoftware با ادغام شده است ModernPrinter، بنابراین منطقی به کدنویسی مانند نیست oldPrinter.oldPrint(“Hello world”); در NewSoftware کلاس (حتی اگر بدون خطا کامپایل شود).
خروجی:
Hello world by old printer
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
دام
آداپتوری که علاوه بر ترجمه ساده رابط، کارهای زیادی را انجام میدهد، منجر به افزودن/تغییر رفتار سازگار میشود، که با هدف الگوی آداپتور فاصله زیادی دارد.
آداپتور شی و کلاس
چیزی که ما دیده ایم یک نامیده می شود آداپتور شی، که سازگار کننده را با استفاده از ترکیب تطبیق می دهد. نوع دیگری از آداپتور به نام a آداپتور کلاس، که از وراثت برای دستیابی به هدف الگوی Adapter استفاده می کند.
جاوا از وراثت چندگانه پشتیبانی نمی کند. بنابراین ما نمی توانیم از آداپتور کلاس در جاوا استفاده کنیم، اما به هر حال آن را مطالعه خواهیم کرد زیرا ممکن است با آداپتور کلاس در زبان دیگری مواجه شوید.
از آنجا که آداپتور شی از ترکیب استفاده می کند، Adapter می تواند ارجاع به یک یا چند را داشته باشد Adaptee اشیاء بنابراین، آداپتور شی انعطاف پذیری بیشتری ارائه می دهد. در حالی که آداپتور کلاس به شدت با یک و تنها یک سازگار همراه است که منجر به انعطاف پذیری کمتری می شود.
در اینجا می توانید تمام پیاده سازی های الگوی طراحی را بررسی کنید.مخزن GitHub
الگوی آداپتور چیست؟
الگوی آداپتور یک الگوی ساختاری است که رابط یک کلاس را به رابط دیگری که مشتریان انتظار دارند تبدیل می کند. آداپتور به کلاسها اجازه میدهد با هم کار کنند که به دلیل رابطهای ناسازگار امکانپذیر نبود.
چه زمانی از آن استفاده کنیم؟
- زمانی که میخواهید از کدهای قدیمی یا کتابخانههای شخص ثالث استفاده کنید، اما رابط آن با سایر بخشهای برنامه شما ناسازگار است، از الگوی آداپتور استفاده کنید.
مشکل
ما از یک چاپگر قدیمی استفاده کرده ایم اما اکنون نرم افزار رایگان جدیدی اختراع شده است که با چاپگر جدید ادغام شده است. مشکل این است که ما نمی توانیم چاپگر جدید بخریم اما همچنان می خواهیم از نرم افزار استفاده کنیم. آیا راهی برای استفاده از نرم افزار جدید اما با چاپگر قدیمی که با نرم افزار ناسازگار است وجود دارد؟ بله، در اینجا الگوی آداپتور مفید است.
راه حل
-
نرم افزار جدید
این مشتری ماست این فقط قبول میکنهModernPrinter
رابط کاربری NewSoftware فکر می کند که با آن سروکار داردModernPrinter
. -
چاپگر مدرن
رابط سازگار را برای Client فراهم می کند. -
آداپتور چاپگر
فراخوانی متد را دریافت می کندmodernPrint()
ازModernPrinter
، سپس آن را به فرمت ترجمه می کند -
OldPrinter
این همان چیزی است که ما می خواهیم استفاده کنیم اما رابط کاربری آن با ما ناسازگار استNewSoftware
.oldPrint()
زمانی که اعدام می شودModernPrinter
تماس می گیردmodernPrint()
.
ساختار
به یاد داشته باشید که یک آداپتور را می توان با هر زیر کلاسی از adaptee استفاده کرد.
پیاده سازی در جاوا
public class OldPrinter {
public void oldPrint(String document) {
System.out.println(document + " by old printer");
}
}
public interface ModernPrinter {
void modernPrint(String document);
}
public class PrinterAdapter implements ModernPrinter {
private OldPrinter oldPrinter;
public PrinterAdapter(OldPrinter oldPrinter) {
this.oldPrinter = oldPrinter;
}
@Override
public void modernPrint(String document) {
oldPrinter.oldPrint(document);
}
}
public class NewSoftware {
public static void main(String[] args) {
OldPrinter oldPrinter = new OldPrinter();
// Because PrinterAdapter implements ModernPrinter, it can be seen
// as a ModernPrinter which is integrated with NewSoftware
ModernPrinter adapter = new PrinterAdapter(oldPrinter);
adapter.modernPrint("Hello world");
}
}
در فرض ما، شما NewSoftware
با ادغام شده است ModernPrinter
، بنابراین منطقی به کدنویسی مانند نیست oldPrinter.oldPrint("Hello world");
در NewSoftware
کلاس (حتی اگر بدون خطا کامپایل شود).
خروجی:
Hello world by old printer
دام
- آداپتوری که علاوه بر ترجمه ساده رابط، کارهای زیادی را انجام میدهد، منجر به افزودن/تغییر رفتار سازگار میشود، که با هدف الگوی آداپتور فاصله زیادی دارد.
آداپتور شی و کلاس
چیزی که ما دیده ایم یک نامیده می شود آداپتور شی، که سازگار کننده را با استفاده از ترکیب تطبیق می دهد. نوع دیگری از آداپتور به نام a آداپتور کلاس، که از وراثت برای دستیابی به هدف الگوی Adapter استفاده می کند.
جاوا از وراثت چندگانه پشتیبانی نمی کند. بنابراین ما نمی توانیم از آداپتور کلاس در جاوا استفاده کنیم، اما به هر حال آن را مطالعه خواهیم کرد زیرا ممکن است با آداپتور کلاس در زبان دیگری مواجه شوید.
از آنجا که آداپتور شی از ترکیب استفاده می کند، Adapter
می تواند ارجاع به یک یا چند را داشته باشد Adaptee
اشیاء بنابراین، آداپتور شی انعطاف پذیری بیشتری ارائه می دهد. در حالی که آداپتور کلاس به شدت با یک و تنها یک سازگار همراه است که منجر به انعطاف پذیری کمتری می شود.
در اینجا می توانید تمام پیاده سازی های الگوی طراحی را بررسی کنید.
مخزن GitHub