برنامه نویسی

الگوی آداپتور – انجمن 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

الگوی آداپتور چیست؟

الگوی آداپتور یک الگوی ساختاری است که رابط یک کلاس را به رابط دیگری که مشتریان انتظار دارند تبدیل می کند. آداپتور به کلاس‌ها اجازه می‌دهد با هم کار کنند که به دلیل رابط‌های ناسازگار امکان‌پذیر نبود.

چه زمانی از آن استفاده کنیم؟

  • زمانی که می‌خواهید از کدهای قدیمی یا کتابخانه‌های شخص ثالث استفاده کنید، اما رابط آن با سایر بخش‌های برنامه شما ناسازگار است، از الگوی آداپتور استفاده کنید.

مشکل

ما از یک چاپگر قدیمی استفاده کرده ایم اما اکنون نرم افزار رایگان جدیدی اختراع شده است که با چاپگر جدید ادغام شده است. مشکل این است که ما نمی توانیم چاپگر جدید بخریم اما همچنان می خواهیم از نرم افزار استفاده کنیم. آیا راهی برای استفاده از نرم افزار جدید اما با چاپگر قدیمی که با نرم افزار ناسازگار است وجود دارد؟ بله، در اینجا الگوی آداپتور مفید است.

راه حل

توضیحات تصویر

  1. نرم افزار جدید
    این مشتری ماست این فقط قبول میکنه ModernPrinter رابط کاربری NewSoftware فکر می کند که با آن سروکار دارد ModernPrinter.

  2. چاپگر مدرن
    رابط سازگار را برای Client فراهم می کند.

  3. آداپتور چاپگر
    فراخوانی متد را دریافت می کند modernPrint() از ModernPrinter، سپس آن را به فرمت ترجمه می کند

  4. 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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا