Adapter Pattern

Adapter Pattern:

الگوی سازگارساز (وفق دهنده، مبدل، Adapter Pattern)، الگوی است که در دنیا واقعی نمونه های زیادی از این الگو وجود دارد و به همین خاطر درک این الگو زیاد مشکل نخواهد بود.

شکل زیر را در نظر بگیرید و فرض کنید که کامپیوتر laptop شما دارای دو شاخه ای به شکل زیر است ولی پریز های برقی که در دیوار نصب شده است به شکلی است که در سمت چپ تصویر نشان داده شده است. شما برای استفاده از لپ تاپ خود در این محل چه کاری را انجام می دهید؟

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

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

وفق دهند های شی گرا:

فرض کنید که شما یک سیستم نرم افزاری دارید که نیاز دارد با کتابخانه ی از کلاس های جدید که مربوط به فروشندگان است کار کند، اما کلاس های جدید به گونه ای طراحی شده اند که اینترفیس متفاوتی را نسبت به اینترفیس قبلی دارند.

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

 

 

Adapter(سازگار ساز، وفق دهنده) مانند یک واسطه عمل می کند و درخواست های را که از سیستم موجود می رسد دریافت می کند و آنها را به شکلی تغییر می دهد و برای کلاس مورد نظر در سیستم فروشندگان ارسال می کند که قابل درک و اجرا برای آن کلاس باشد.

 

برای نمونه در شکل بالا کلاس کلاینت متدی به نام Max را که در اینترفیس Math1 تعریف شده است را نیاز دارد. ولی کلاس های که این اینترفیس را پیاده سازی می کنند. عملی را که کلاس کلاینت در نظر دارد انجام نمی دهند. ولی اینترفیس Math2 دارای عملی به نام Maxvalue است که توسط کلاس Imp2 پیاده سازی شده است و دقیقا خواسته کلاس کلاینت را انجام می دهد ولی با یک اینترفیس دیگر. برای حل این مشکل چه پیشنهادی دارید؟

برای حل این مشکل ما از یک مبدل (Adapter)، استفاده می کنیم. یعنی یک کلاس جدید تعریف می کنیم که اینترفیسی را که کلاس کلاینت می شناسد پیاده سازی می کند. ولی عمل Max را طوری سر بار گذاری می کنیم که وقتی آن فراخوانی می شود. عمل Maxvalue از کلاس Imp2 را فراخوانی کند.

 

 

نمودار کلاس Adapter:

نمودار کلاس الگو به صورت زیر است:

 

 

 

  1. ۲۴ دی ۱۳۸۵ در ۱۶:۴۷ | #1

    سلام دوست عزیزوبلاگ جالبی دارید میخواستم در صورت موافقت با هم تبادل لینک کنیماگر وافق به تبادل لینک بودید وبلاگ من را با عنوان هک#بوت#تروجان(مهیار) لینک کن من هم شما رو با عنوان در خواستی لینک میکنم

  2. عباسی
    ۷ بهمن ۱۳۸۵ در ۱۴:۱۴ | #2

    سلام . من تازه میخوام در مورد مهندسی نرم افزار تحقیق و مطالعه کنم . (اینجا رو هم دوست خویم گوگل بهم گفت ) .چه کتاب و منابعی رو معرفی میکنید . توی چه چیز هایی باید قوی باشم که سریعتر و عمیق تر یاد بگیرم .ممنونم .

  3. ۷ بهمن ۱۳۸۵ در ۱۴:۱۵ | #3

    صرفا برای اینکه فراموش کردم آدرسم رو بنویسم

  4. ۲۶ اسفند ۱۳۸۵ در ۱۲:۲۷ | #4

    سلامخوب بود یعنی بد نبود نسبت به قبلی ها که مطالعه کردم نسبتا بهتر بود میخوام اگه خواستی در تماس باشیمموفق و سربلند باشی م.ب

  1. بدون بازتاب